--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
sbapp/sideband/core.py 7076fae5cc554d603dbcd1925eee80a119e2dc13 (7076fae5) Text, 154.93 KB
Tff7b72import T7ee787RNS
Tff7b72import T7ee787LXMF
Tff7b72import T7ee787threading
Tff7b72import T7ee787plyer
Tff7b72import T7ee787osT7ee787.T7ee787path
Tff7b72import T7ee787time
Tff7b72import T7ee787struct
Tff7b72import T7ee787sqlite3
Tff7b72import T7ee787random
Tff7b72import T7ee787RNST7ee787.T7ee787vendorT7ee787.T7ee787umsgpack Tff7b72as T7ee787msgpack
Tff7b72import T7ee787RNST7ee787.T7ee787InterfacesT7ee787.T7ee787Interface Tff7b72as T7ee787Interface
Tff7b72import T7ee787multiprocessingT7ee787.T7ee787connection
Tff7b72from T7ee787.T7ee787res Tff7b72import Te6edf3sideband_fb_data
Tff7b72from T7ee787.T7ee787sense Tff7b72import Te6edf3TelemeterTb4b4b4, Te6edf3Commands
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72from T7ee787jnius Tff7b72import Te6edf3autoclassTb4b4b4, Te6edf3cast
T8b949e# Squelch excessive method signature logging
Tff7b72import T7ee787jniusT7ee787.T7ee787reflect
Tff7b72class T56d364redirect_logTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffisEnabledForTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3argTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffdebugTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3argTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffmodTb4b4b4(Te6edf3methodTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3signatureTb4b4b4)Tb4b4b4:
Tff7b72pass
Te6edf3jniusTff7b72.Td2a8ffreflectTff7b72.Td2a8fflog_method Tff7b72= Te6edf3mod
Te6edf3jniusTff7b72.Td2a8ffreflectTff7b72.Td2a8fflog Tff7b72= Te6edf3redirect_logTb4b4b4(Tb4b4b4)
T8b949e############################################
Tff7b72class T56d364PropagationNodeDetectorTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3EMITTED_DELTA_GRACE Tff7b72= T79c0ff300
Te6edf3EMITTED_DELTA_IGNORE Tff7b72= T79c0ff10
Te6edf3aspect_filter Tff7b72= Ta5d6ff"Ta5d6fflxmf.propagationTa5d6ff"
Tff7b72def Td2a8ffreceived_announceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3announced_identityTb4b4b4, Te6edf3app_dataTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3app_data Tff7b72!= Tff7b72None Tff7b72and Tffa657lenTb4b4b4(Te6edf3app_dataTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3unpacked Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3app_dataTb4b4b4)
Te6edf3node_active Tff7b72= Te6edf3unpackedTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3emitted Tff7b72= Te6edf3unpackedTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3hops Tff7b72= Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhops_toTb4b4b4(Te6edf3destination_hashTb4b4b4)
Te6edf3age Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3emitted
Tff7b72if Te6edf3age Tff7b72< T79c0ff0Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffWarning, propagation node announce emitted in the future, possible timing inconsistency or tampering attempt.Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3age Tff7b72< Tff7b72-T79c0ff1Tff7b72*Te6edf3PropagationNodeDetectorTff7b72.Td2a8ffEMITTED_DELTA_GRACETb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffAnnounce timestamp too far in the future, discarding itTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3age Tff7b72> Tff7b72-T79c0ff1Tff7b72*Te6edf3PropagationNodeDetectorTff7b72.Td2a8ffEMITTED_DELTA_IGNORETb4b4b4:
T8b949e# age = 0
Tff7b72pass
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDetected active propagation node Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3destination_hashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff emission Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3ageTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff seconds ago, Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3hopsTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff hops awayTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8fflog_announceTb4b4b4(Te6edf3destination_hashTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3destination_hashTb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3dest_typeTff7b72=Te6edf3PropagationNodeDetectorTff7b72.Td2a8ffaspect_filterTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_propagation_nodeTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffactive_propagation_node Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffset_active_propagation_nodeTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3prev_hops Tff7b72= Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhops_toTb4b4b4(Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffactive_propagation_nodeTb4b4b4)
Tff7b72if Te6edf3hops Tff7b72<Tff7b72= Te6edf3prev_hopsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffset_active_propagation_nodeTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72pass
Tff7b72elseTb4b4b4:
Tff7b72pass
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while processing received propagation node announce: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3ownerTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffowner Tff7b72= Te6edf3owner
Tff7b72selfTff7b72.Td2a8ffowner_app Tff7b72= Te6edf3ownerTff7b72.Td2a8ffowner_app
Tff7b72class T56d364SidebandCoreTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3CONV_P2P Tff7b72= T79c0ff0x01
Te6edf3CONV_GROUP Tff7b72= T79c0ff0x02
Te6edf3CONV_BROADCAST Tff7b72= T79c0ff0x03
Te6edf3MAX_ANNOUNCES Tff7b72= T79c0ff24
Te6edf3SERVICE_JOB_INTERVAL Tff7b72= T79c0ff1
Te6edf3PERIODIC_JOBS_INTERVAL Tff7b72= T79c0ff60
Te6edf3PERIODIC_SYNC_RETRY Tff7b72= T79c0ff360
Te6edf3TELEMETRY_INTERVAL Tff7b72= T79c0ff60
Te6edf3IF_CHANGE_ANNOUNCE_MIN_INTERVAL Tff7b72= T79c0ff6 T8b949e# In seconds
Te6edf3AUTO_ANNOUNCE_RANDOM_MIN Tff7b72= T79c0ff90 T8b949e# In minutes
Te6edf3AUTO_ANNOUNCE_RANDOM_MAX Tff7b72= T79c0ff480 T8b949e# In minutes
Te6edf3DEFAULT_APPEARANCE Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ffaccountTa5d6ff"Tb4b4b4, Tb4b4b4[T79c0ff0Tb4b4b4,T79c0ff0Tb4b4b4,T79c0ff0Tb4b4b4,T79c0ff1Tb4b4b4]Tb4b4b4, Tb4b4b4[T79c0ff1Tb4b4b4,T79c0ff1Tb4b4b4,T79c0ff1Tb4b4b4,T79c0ff1Tb4b4b4]Tb4b4b4]
Te6edf3aspect_filter Tff7b72= Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"
Tff7b72def Td2a8ffreceived_announceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3announced_identityTb4b4b4, Te6edf3app_dataTb4b4b4)Tb4b4b4:
T8b949e# Add the announce to the directory announce
T8b949e# stream logger
Tff7b72selfTff7b72.Td2a8fflog_announceTb4b4b4(Te6edf3destination_hashTb4b4b4, Te6edf3app_dataTb4b4b4, Te6edf3dest_typeTff7b72=Te6edf3SidebandCoreTff7b72.Td2a8ffaspect_filterTb4b4b4)
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3owner_appTb4b4b4, Te6edf3is_serviceTff7b72=Tff7b72FalseTb4b4b4, Te6edf3is_clientTff7b72=Tff7b72FalseTb4b4b4, Te6edf3android_app_dirTff7b72=Tff7b72NoneTb4b4b4, Te6edf3verboseTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffis_service Tff7b72= Te6edf3is_service
Tff7b72selfTff7b72.Td2a8ffis_client Tff7b72= Te6edf3is_client
Tff7b72selfTff7b72.Td2a8ffdb Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffis_service Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffis_standalone Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffis_standalone Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fflog_verbose Tff7b72= Te6edf3verbose
Tff7b72selfTff7b72.Td2a8ffowner_app Tff7b72= Te6edf3owner_app
Tff7b72selfTff7b72.Td2a8ffreticulum Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffwebshare_server Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fftelemeter Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fftelemetry_running Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fftelemetry_changes Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send_try Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send_maxtries Tff7b72= T79c0ff2
Tff7b72selfTff7b72.Td2a8fftelemetry_send_blocked_until Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_request Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fftelemetry_request_max_history Tff7b72= T79c0ff3Tff7b72*T79c0ff24Tff7b72*T79c0ff60Tff7b72*T79c0ff60
Tff7b72selfTff7b72.Td2a8ffstate_db Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffrpc_connection Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffapp_dir Tff7b72= Te6edf3plyerTff7b72.Td2a8ffstoragepathTff7b72.Td2a8ffget_home_dirTb4b4b4(Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff/.config/sidebandTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffcache_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/cacheTa5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6fffile://Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6fffile://Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrns_configdir Tff7b72= Tff7b72None
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp_dir Tff7b72= Te6edf3android_app_dirTff7b72+Ta5d6ff"Ta5d6ff/io.unsigned.sideband/files/Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffcache_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/cacheTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrns_configdir Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storage/reticulumTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffasset_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app/assetsTa5d6ff"
Tff7b72elif Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_darwinTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3core_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffabspathTb4b4b4(Tff7b72__file__Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffasset_dir Tff7b72= Te6edf3core_pathTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff/sideband/core.pyTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/assetsTa5d6ff"Tb4b4b4)
Tff7b72elif Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6fflinuxTa5d6ff"Tb4b4b4:
Te6edf3core_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffabspathTb4b4b4(Tff7b72__file__Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffasset_dir Tff7b72= Te6edf3core_pathTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff/sideband/core.pyTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/assetsTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffasset_dir Tff7b72= Te6edf3plyerTff7b72.Td2a8ffstoragepathTff7b72.Td2a8ffget_application_dirTb4b4b4(Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff/sbapp/assetsTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffmap_cache Tff7b72= Tff7b72selfTff7b72.Td2a8ffcache_dirTff7b72+Ta5d6ff"Ta5d6ff/mapsTa5d6ff"
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmap_cacheTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmap_cacheTb4b4b4)
Tff7b72selfTff7b72.Td2a8fficon Tff7b72= Tff7b72selfTff7b72.Td2a8ffasset_dirTff7b72+Ta5d6ff"Ta5d6ff/icon.pngTa5d6ff"
Tff7b72selfTff7b72.Td2a8fficon_48 Tff7b72= Tff7b72selfTff7b72.Td2a8ffasset_dirTff7b72+Ta5d6ff"Ta5d6ff/icon_48.pngTa5d6ff"
Tff7b72selfTff7b72.Td2a8fficon_32 Tff7b72= Tff7b72selfTff7b72.Td2a8ffasset_dirTff7b72+Ta5d6ff"Ta5d6ff/icon_32.pngTa5d6ff"
Tff7b72selfTff7b72.Td2a8fficon_macos Tff7b72= Tff7b72selfTff7b72.Td2a8ffasset_dirTff7b72+Ta5d6ff"Ta5d6ff/icon_macos.pngTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffnotification_icon Tff7b72= Tff7b72selfTff7b72.Td2a8ffasset_dirTff7b72+Ta5d6ff"Ta5d6ff/notification_icon.pngTa5d6ff"
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storageTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storageTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffconfig_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storage/sideband_configTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffidentity_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storage/primary_identityTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffdb_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storage/sideband.dbTa5d6ff"
Tff7b72selfTff7b72.Td2a8fflxmf_storage Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storage/Ta5d6ff"
Tff7b72selfTff7b72.Td2a8fflog_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storage/Ta5d6ff"
Tff7b72selfTff7b72.Td2a8fftmp_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storage/tmpTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffexports_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/exportsTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffwebshare_dir Tff7b72= Ta5d6ff"Ta5d6ff./share/Ta5d6ff"
Tff7b72selfTff7b72.Td2a8fffirst_run Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffsaving_configuration Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fflast_lxmf_announce Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8fflast_if_change_announce Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffinterface_local_adding Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffnext_auto_announce Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72+ T79c0ff60Tff7b72*Tb4b4b4(Te6edf3randomTff7b72.Td2a8ffrandomTb4b4b4(Tb4b4b4)Tff7b72*Tb4b4b4(Te6edf3SidebandCoreTff7b72.Td2a8ffAUTO_ANNOUNCE_RANDOM_MAXTff7b72-Te6edf3SidebandCoreTff7b72.Td2a8ffAUTO_ANNOUNCE_RANDOM_MINTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffgetstate_cache Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfig_pathTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__init_configTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__load_configTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__load_configTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__init_configTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__load_configTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fffirst_run Tff7b72= Tff7b72False
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdebugTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fflog_verbose Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Tff7b72selfTff7b72.Td2a8fftmp_dirTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Tff7b72selfTff7b72.Td2a8fftmp_dirTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclear_tmp_dirTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffexports_dirTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclear_exports_dirTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while configuring Sideband: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
T8b949e# Initialise Reticulum configuration
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrns_configdir Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storage/reticulumTa5d6ff"
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrns_configdirTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrns_configdirTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffConfiguring Reticulum instance...Ta5d6ff"Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_transportTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffEnabling Reticulum TransportTa5d6ff"Tb4b4b4)
Te6edf3generated_config Tff7b72= Te6edf3rns_configTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ffTRANSPORT_IS_ENABLEDTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffYesTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNot enabling Reticulum TransportTa5d6ff"Tb4b4b4)
Te6edf3generated_config Tff7b72= Te6edf3rns_configTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ffTRANSPORT_IS_ENABLEDTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffNoTa5d6ff"Tb4b4b4)
Te6edf3config_file Tff7b72= Tffa657openTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrns_configdirTff7b72+Ta5d6ff"Ta5d6ff/configTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4)
Te6edf3config_fileTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3generated_configTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3config_fileTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while configuring Reticulum instance: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72pass
Tff7b72selfTff7b72.Td2a8ffactive_propagation_node Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffpropagation_detector Tff7b72= Te6edf3PropagationNodeDetectorTb4b4b4(Tff7b72selfTb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffregister_announce_handlerTb4b4b4(Tff7b72selfTb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffregister_announce_handlerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpropagation_detectorTb4b4b4)
Tff7b72def Td2a8ffclear_tmp_dirTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Tff7b72selfTff7b72.Td2a8fftmp_dirTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3file Tff7b72in Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Tff7b72selfTff7b72.Td2a8fftmp_dirTb4b4b4)Tb4b4b4:
Te6edf3fpath Tff7b72= Tff7b72selfTff7b72.Td2a8fftmp_dirTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3fpathTb4b4b4)
Tff7b72def Td2a8ffclear_exports_dirTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffexports_dirTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3file Tff7b72in Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffexports_dirTb4b4b4)Tb4b4b4:
Te6edf3fpath Tff7b72= Tff7b72selfTff7b72.Td2a8ffexports_dirTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffClearing Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3fpathTb4b4b4)Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3fpathTb4b4b4)
Tff7b72def Td2a8ff__init_configTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCreating new Sideband configuration...Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentity_pathTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffidentity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8fffrom_fileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentity_pathTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffidentity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffidentityTff7b72.Td2a8ffto_fileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentity_pathTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffconfig Tff7b72= Tb4b4b4{Tb4b4b4}
T8b949e# Settings
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdebugTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdisplay_nameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffAnonymous PeerTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffnotifications_onTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdark_uiTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffstart_announceTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffpropagation_by_defaultTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhome_node_as_broadcast_repeaterTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffsend_telemetry_to_home_nodeTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_propagation_nodeTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_sync_limitTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_sync_maxTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff3
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_periodic_syncTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_ignore_unknownTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_sync_intervalTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff43200
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflast_lxmf_propagation_nodeTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffnn_home_nodeTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffprint_commandTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fflpTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffeink_modeTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
T8b949e# Connectivity
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_transportTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_localTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_groupidTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcpTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_hostTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffsideband.connect.reticulum.networkTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_portTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff7822Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2pTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_b32Ta5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffpmlm3l5rpympihoy2o5ago43kluei2jjjzsalcuiuylbve3mwi2a.b32.i2pTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnodeTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnode_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnode_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serialTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serial_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serial_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modemTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modem_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modem_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_localTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_tcpTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_i2pTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_rnodeTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_modemTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_serialTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_bluetoothTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
T8b949e# Hardware
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_frequencyTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_modulationTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffLoRaTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bandwidthTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff62500
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_spreading_factorTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff8
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_coding_rateTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff6
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_tx_powerTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_beaconintervalTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_beacondataTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bt_deviceTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bluetoothTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_baudrateTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff57600
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_databitsTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff8
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_stopbitsTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_parityTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffnoneTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_preambleTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff150
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_tailTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff20
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_persistenceTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff220
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_slottimeTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff20
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_beaconintervalTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_beacondataTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_baudrateTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff57600
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_databitsTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff8
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_stopbitsTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_parityTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffnoneTa5d6ff"
T8b949e# Telemetry
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_enabledTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_iconTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3SidebandCoreTff7b72.Td2a8ffDEFAULT_APPEARANCETb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_to_trustedTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_to_collectorTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdb_pathTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__db_initTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_initstateTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_initpersistentTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_inittelemetryTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_upgradetablesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__save_configTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffclear_map_cacheTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3entry Tff7b72in Te6edf3osTff7b72.Td2a8ffscandirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmap_cacheTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3entryTff7b72.Td2a8ffpathTb4b4b4)
Tff7b72def Td2a8ffget_map_cache_sizeTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3total Tff7b72= T79c0ff0
Tff7b72for Te6edf3entry Tff7b72in Te6edf3osTff7b72.Td2a8ffscandirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmap_cacheTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3entryTff7b72.Td2a8ffis_dirTb4b4b4(Te6edf3follow_symlinksTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72elseTb4b4b4:
Te6edf3total Tff7b72+Tff7b72= Te6edf3entryTff7b72.Td2a8ffstatTb4b4b4(Te6edf3follow_symlinksTff7b72=Tff7b72FalseTb4b4b4)Tff7b72.Td2a8ffst_size
Tff7b72return Te6edf3total
Tff7b72def Td2a8ffshould_persist_dataTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffreticulum Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ff_should_persist_dataTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff__load_configTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLoading Sideband identity...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffidentity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8fffrom_fileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentity_pathTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrpc_addr Tff7b72= Tb4b4b4(Ta5d6ff"Ta5d6ff127.0.0.1Ta5d6ff"Tb4b4b4, T79c0ff48165Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrpc_key Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8fffull_hashTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentityTff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLoading Sideband configuration... Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfig_pathTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3config_file Tff7b72= Tffa657openTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfig_pathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffconfig Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3config_fileTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3config_fileTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
T8b949e# Migration actions from earlier config formats
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffdebugTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdebugTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffdark_uiTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdark_uiTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffadvanced_statsTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffadvanced_statsTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fflxmf_periodic_syncTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_periodic_syncTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fflxmf_ignore_unknownTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_ignore_unknownTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fflxmf_sync_intervalTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_sync_intervalTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff43200
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fflxmf_try_propagation_on_failTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_try_propagation_on_failTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffnotifications_onTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffnotifications_onTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffprint_commandTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffprint_commandTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fflpTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffeink_modeTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffeink_modeTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_transportTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_transportTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_rnodeTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnodeTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_rnode_ifac_netnameTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnode_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_rnode_ifac_passphraseTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnode_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_serialTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serialTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_serial_ifac_netnameTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serial_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_serial_ifac_passphraseTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serial_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_modemTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modemTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_modem_ifac_netnameTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modem_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_modem_ifac_passphraseTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modem_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_ifmode_localTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_localTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_ifmode_tcpTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_tcpTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_ifmode_i2pTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_i2pTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_ifmode_rnodeTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_rnodeTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_ifmode_modemTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_modemTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_ifmode_serialTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_serialTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_ifmode_bluetoothTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_bluetoothTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_frequencyTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_frequencyTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_modulationTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_modulationTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffLoRaTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_bandwidthTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bandwidthTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff62500
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_spreading_factorTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_spreading_factorTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff8
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_coding_rateTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_coding_rateTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff6
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_tx_powerTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_tx_powerTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff0
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_beaconintervalTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_beaconintervalTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_beacondataTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_beacondataTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_bluetoothTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bluetoothTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_enable_framebufferTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_enable_framebufferTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_bt_deviceTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bt_deviceTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_atl_shortTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_atl_shortTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_atl_longTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_atl_longTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_baudrateTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_baudrateTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff115200
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_databitsTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_databitsTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff8
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_stopbitsTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_stopbitsTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff1
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_parityTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_parityTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffnoneTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_preambleTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_preambleTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff150
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_tailTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_tailTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff20
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_persistenceTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_persistenceTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff220
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_slottimeTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_slottimeTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff20
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_beaconintervalTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_beaconintervalTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_beacondataTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_beacondataTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_serial_baudrateTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_baudrateTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff57600
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_serial_databitsTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_databitsTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff8
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_serial_stopbitsTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_stopbitsTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff1
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_serial_parityTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_parityTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffnoneTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_enabledTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_enabledTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_send_to_trustedTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_to_trustedTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_send_to_collectorTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_to_collectorTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_request_from_collectorTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_request_from_collectorTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_send_intervalTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_intervalTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff43200
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_request_intervalTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_request_intervalTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff43200
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_iconTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_iconTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3SidebandCoreTff7b72.Td2a8ffDEFAULT_APPEARANCETb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_fgTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_fgTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3SidebandCoreTff7b72.Td2a8ffDEFAULT_APPEARANCETb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_bgTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_bgTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3SidebandCoreTff7b72.Td2a8ffDEFAULT_APPEARANCETb4b4b4[T79c0ff2Tb4b4b4]
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_send_appearanceTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_appearanceTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_display_trusted_onlyTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_display_trusted_onlyTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_receive_trusted_onlyTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_receive_trusted_onlyTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_send_all_to_collectorTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_all_to_collectorTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_use_propagation_onlyTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_use_propagation_onlyTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_try_propagation_on_failTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_try_propagation_on_failTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_locationTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_locationTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_batteryTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_batteryTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_pressureTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_pressureTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_temperatureTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_temperatureTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_humidityTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_humidityTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_magnetic_fieldTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_magnetic_fieldTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_ambient_lightTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_ambient_lightTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_gravityTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_gravityTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_angular_velocityTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_angular_velocityTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_accelerationTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_accelerationTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_proximityTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_proximityTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_fixed_locationTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_fixed_locationTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_fixed_latlonTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_fixed_latlonTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4[T79c0ff0.0Tb4b4b4, T79c0ff0.0Tb4b4b4]
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_fixed_altitudeTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_fixed_altitudeTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff0.0
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_informationTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_informationTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_information_textTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_information_textTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_history_limitTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_history_limitTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff7Tff7b72*T79c0ff24Tff7b72*T79c0ff60Tff7b72*T79c0ff60
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_latTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_latTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff0.0
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_lonTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_lonTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff0.0
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_zoomTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_zoomTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff3
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_storage_externalTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_externalTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_use_offlineTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_use_offlineTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_use_onlineTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_use_onlineTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_layerTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_layerTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_storage_pathTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_pathTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_storage_fileTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_fileTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
T8b949e# Make sure we have a database
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdb_pathTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__db_initTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_initstateTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_initpersistentTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_inittelemetryTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_upgradetablesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__db_indicesTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff__reload_configTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffReloading Sideband configuration... Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfig_pathTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3config_file Tff7b72= Tffa657openTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfig_pathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffconfig Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3config_fileTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3config_fileTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_active_lxmf_propagation_nodeTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff__save_configTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffSaving Sideband configuration...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72def Td2a8ffsave_functionTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72while Tff7b72selfTff7b72.Td2a8ffsaving_configurationTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.15Tb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsaving_configuration Tff7b72= Tff7b72True
Te6edf3config_file Tff7b72= Tffa657openTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfig_pathTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4)
Te6edf3config_fileTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4)Tb4b4b4)
Te6edf3config_fileTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsaving_configuration Tff7b72= Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsaving_configuration Tff7b72= Tff7b72False
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while saving Sideband configuration: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3save_functionTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.settings_reloadTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffreload_configurationTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__reload_configTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffsave_configurationTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__save_configTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffset_active_propagation_nodeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3dest Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNo active propagation node configuredTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffactive_propagation_node Tff7b72= Te6edf3dest
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflast_lxmf_propagation_nodeTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3dest
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffset_outbound_propagation_nodeTb4b4b4(Te6edf3destTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffActive propagation node set to: Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3destTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__save_configTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while setting LXMF propagation node: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ffnotifyTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3titleTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3groupTff7b72=Tff7b72NoneTb4b4b4, Te6edf3context_idTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffnotifications_onTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6ff"Ta5d6ffpermissions.notificationsTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3notifications_permitted Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Te6edf3notifications_permitted Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Te6edf3notifications_permitted Tff7b72= Tff7b72True
Tff7b72if Te6edf3notifications_permittedTb4b4b4:
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffowner_serviceTff7b72.Td2a8ffandroid_notificationTb4b4b4(Te6edf3titleTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3groupTff7b72=Te6edf3groupTb4b4b4, Te6edf3context_idTff7b72=Te6edf3context_idTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3plyerTff7b72.Td2a8ffnotificationTff7b72.Td2a8ffnotifyTb4b4b4(Te6edf3titleTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3notification_iconTff7b72=Tff7b72selfTff7b72.Td2a8ffnotification_iconTb4b4b4, Te6edf3context_overrideTff7b72=Tff7b72NoneTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3plyerTff7b72.Td2a8ffnotificationTff7b72.Td2a8ffnotifyTb4b4b4(Te6edf3titleTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3app_iconTff7b72=Tff7b72selfTff7b72.Td2a8fficon_32Tb4b4b4)
Tff7b72def Td2a8fflog_announceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destTb4b4b4, Te6edf3app_dataTb4b4b4, Te6edf3dest_typeTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3app_data Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3app_data Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff"
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffReceived Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3dest_typeTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff announce for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3destTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff with data: Ta5d6ff"Tff7b72+Te6edf3app_dataTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_save_announceTb4b4b4(Te6edf3destTb4b4b4, Te6edf3app_dataTb4b4b4, Te6edf3dest_typeTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.new_announcesTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffException while decoding LXMF destination announce data:Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fflist_conversationsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationsTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3result Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3result
Tff7b72elseTb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8fflist_announcesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_announcesTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3result Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3result
Tff7b72elseTb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffhas_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3existing_conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3existing_conv Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffis_trustedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3conv_data Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3conv_data Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3existing_conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3existing_conv Tff7b72= Te6edf3conv_data
Tff7b72if Te6edf3existing_conv Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6fftrustTa5d6ff"Tb4b4b4] Tff7b72== T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while checking trust for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffshould_send_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3existing_conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3existing_conv Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3cd Tff7b72= Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3cd Tff7b72!= Tff7b72None Tff7b72and Ta5d6ff"Ta5d6fftelemetryTa5d6ff" Tff7b72in Te6edf3cd Tff7b72and Te6edf3cdTb4b4b4[Ta5d6ff"Ta5d6fftelemetryTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_trustedTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3conv_dataTff7b72=Te6edf3existing_convTb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_to_trustedTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while checking telemetry sending for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffrequests_allowed_fromTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3existing_conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3existing_conv Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3cd Tff7b72= Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3cd Tff7b72!= Tff7b72None Tff7b72and Ta5d6ff"Ta5d6ffallow_requestsTa5d6ff" Tff7b72in Te6edf3cd Tff7b72and Te6edf3cdTb4b4b4[Ta5d6ff"Ta5d6ffallow_requestsTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while checking request permissions for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffraw_display_nameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3existing_conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3existing_conv Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72!= Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72return Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff"
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while getting peer name: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ff"
Tff7b72def Td2a8ffpeer_appearanceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3appearance Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_get_appearanceTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3appearance Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3SidebandCoreTff7b72.Td2a8ffDEFAULT_APPEARANCE
Tff7b72for Te6edf3e Tff7b72in Te6edf3appearanceTb4b4b4:
Tff7b72if Te6edf3e Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3SidebandCoreTff7b72.Td2a8ffDEFAULT_APPEARANCE
Tff7b72return Te6edf3appearance
Tff7b72def Td2a8ffpeer_display_nameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3context_dest Tff7b72== Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdisplay_nameTa5d6ff"Tb4b4b4]
Tff7b72tryTb4b4b4:
Te6edf3existing_conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3existing_conv Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72!= Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72if Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6fftrustTa5d6ff"Tb4b4b4] Tff7b72== T79c0ff1Tb4b4b4:
Tff7b72return Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72return Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3app_data Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecall_app_dataTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3app_data Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6fftrustTa5d6ff"Tb4b4b4] Tff7b72== T79c0ff1Tb4b4b4:
Tff7b72return Te6edf3app_dataTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Te6edf3app_dataTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3app_data Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecall_app_dataTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3app_data Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3app_dataTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not decode a valid peer name from data: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72def Td2a8ffclear_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_clear_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72def Td2a8ffclear_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_clear_telemetryTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72def Td2a8ffdelete_announceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_delete_announceTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72def Td2a8ffdelete_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_clear_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_clear_telemetryTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_delete_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72def Td2a8ffdelete_messageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3message_hashTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_delete_messageTb4b4b4(Te6edf3message_hashTb4b4b4)
Tff7b72def Td2a8ffread_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_unreadTb4b4b4(Te6edf3context_destTb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72def Td2a8ffunread_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3txTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_unreadTb4b4b4(Te6edf3context_destTb4b4b4, Tff7b72TrueTb4b4b4, Te6edf3txTff7b72=Te6edf3txTb4b4b4)
Tff7b72def Td2a8fftxtime_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_update_txtimeTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72def Td2a8fftrusted_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_trustedTb4b4b4(Te6edf3context_destTb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffuntrusted_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_trustedTb4b4b4(Te6edf3context_destTb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72def Td2a8ffsend_telemetry_in_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_telemetryTb4b4b4(Te6edf3context_destTb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffno_telemetry_in_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_telemetryTb4b4b4(Te6edf3context_destTb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72def Td2a8ffallow_requests_fromTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_requestsTb4b4b4(Te6edf3context_destTb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffdisallow_requests_fromTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_requestsTb4b4b4(Te6edf3context_destTb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72def Td2a8ffnamed_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_nameTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3nameTb4b4b4)
Tff7b72def Td2a8ffcount_messagesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_message_countTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3result Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3result
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffoutbound_telemetry_finishedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3messageTff7b72.Td2a8ffstate Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffFAILED Tff7b72and Tffa657hasattrTb4b4b4(Te6edf3messageTb4b4b4, Ta5d6ff"Ta5d6fftry_propagation_on_failTa5d6ff"Tb4b4b4) Tff7b72and Te6edf3messageTff7b72.Td2a8fftry_propagation_on_failTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDirect delivery of telemetry update Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3messageTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff failed. Retrying as propagated message.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_VERBOSETb4b4b4)
Te6edf3messageTff7b72.Td2a8fftry_propagation_on_fail Tff7b72= Tff7b72None
Te6edf3messageTff7b72.Td2a8ffdelivery_attempts Tff7b72= T79c0ff0
Tff7b72del Te6edf3messageTff7b72.Td2a8ffnext_delivery_attempt
Te6edf3messageTff7b72.Td2a8ffpacked Tff7b72= Tff7b72None
Te6edf3messageTff7b72.Td2a8ffdesired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPROPAGATED
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffhandle_outboundTb4b4b4(Te6edf3messageTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3messageTff7b72.Td2a8ffstate Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffDELIVEREDTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3messageTff7b72.Td2a8ffdestination_hashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.last_send_success_timebaseTa5d6ff"Tb4b4b4, Te6edf3messageTff7b72.Td2a8fftelemetry_timebaseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3messageTff7b72.Td2a8ffdestination_hashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.update_sendingTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72if Te6edf3messageTff7b72.Td2a8ffdestination_hash Tff7b72== Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send_try Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8fftelemetry_send_blocked_until Tff7b72= T79c0ff0
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3messageTff7b72.Td2a8ffdestination_hashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.update_sendingTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72def Td2a8fftelemetry_request_finishedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3messageTff7b72.Td2a8ffstate Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffFAILED Tff7b72and Tffa657hasattrTb4b4b4(Te6edf3messageTb4b4b4, Ta5d6ff"Ta5d6fftry_propagation_on_failTa5d6ff"Tb4b4b4) Tff7b72and Te6edf3messageTff7b72.Td2a8fftry_propagation_on_failTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDirect delivery of telemetry request Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3messageTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff failed. Retrying as propagated message.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_VERBOSETb4b4b4)
Te6edf3messageTff7b72.Td2a8fftry_propagation_on_fail Tff7b72= Tff7b72None
Te6edf3messageTff7b72.Td2a8ffdelivery_attempts Tff7b72= T79c0ff0
Tff7b72del Te6edf3messageTff7b72.Td2a8ffnext_delivery_attempt
Te6edf3messageTff7b72.Td2a8ffpacked Tff7b72= Tff7b72None
Te6edf3messageTff7b72.Td2a8ffdesired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPROPAGATED
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffhandle_outboundTb4b4b4(Te6edf3messageTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3messageTff7b72.Td2a8ffstate Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffDELIVEREDTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3messageTff7b72.Td2a8ffdestination_hashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.last_request_success_timebaseTa5d6ff"Tb4b4b4, Te6edf3messageTff7b72.Td2a8ffrequest_timebaseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3messageTff7b72.Td2a8ffdestination_hashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.request_sendingTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72if Te6edf3messageTff7b72.Td2a8ffdestination_hash Tff7b72== Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_request Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_request_try Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8fftelemetry_request_blocked_until Tff7b72= T79c0ff0
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3messageTff7b72.Td2a8ffdestination_hashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.request_sendingTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72def Td2a8ffrequest_latest_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3from_addrTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3from_addrTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.request_sendingTa5d6ff"Tb4b4b4) Tff7b72== Tff7b72TrueTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNot sending new telemetry request, since an earlier transfer is already in progressTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffin_progressTa5d6ff"
Tff7b72if Te6edf3from_addr Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3dest_identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3from_addrTb4b4b4)
Tff7b72if Te6edf3dest_identity Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe identity for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3from_addrTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff could not be recalled. Requesting identity from network...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffrequest_pathTb4b4b4(Te6edf3from_addrTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffdestination_unknownTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3dest Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(Te6edf3dest_identityTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4, Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdeliveryTa5d6ff"Tb4b4b4)
Te6edf3source Tff7b72= Tff7b72selfTff7b72.Td2a8fflxmf_destination
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_use_propagation_onlyTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPROPAGATED
Tff7b72elseTb4b4b4:
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffDIRECT
Te6edf3request_timebase Tff7b72= Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3from_addrTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.timebaseTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3now Tff7b72- Tff7b72selfTff7b72.Td2a8fftelemetry_request_max_history
Te6edf3lxm_fields Tff7b72= Tb4b4b4{ Te6edf3LXMFTff7b72.Td2a8ffFIELD_COMMANDSTb4b4b4: Tb4b4b4[
Tb4b4b4{Te6edf3CommandsTff7b72.Td2a8ffTELEMETRY_REQUESTTb4b4b4: Te6edf3request_timebaseTb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4}
Te6edf3lxm Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTb4b4b4(Te6edf3destTb4b4b4, Te6edf3sourceTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3desired_methodTff7b72=Te6edf3desired_methodTb4b4b4, Te6edf3fields Tff7b72= Te6edf3lxm_fieldsTb4b4b4)
Te6edf3lxmTff7b72.Td2a8ffrequest_timebase Tff7b72= Te6edf3request_timebase
Te6edf3lxmTff7b72.Td2a8ffregister_delivery_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8fftelemetry_request_finishedTb4b4b4)
Te6edf3lxmTff7b72.Td2a8ffregister_failed_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8fftelemetry_request_finishedTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffget_outbound_propagation_nodeTb4b4b4(Tb4b4b4) Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_try_propagation_on_failTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3lxmTff7b72.Td2a8fftry_propagation_on_fail Tff7b72= Tff7b72True
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffSending telemetry request with timebase Tffd700{Te6edf3request_timebaseTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3from_addrTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.last_request_attemptTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3from_addrTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.request_sendingTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffhandle_outboundTb4b4b4(Te6edf3lxmTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffsentTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffnot_sentTa5d6ff"
Tff7b72def Td2a8ffsend_latest_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3to_addrTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3to_addrTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.update_sendingTa5d6ff"Tb4b4b4) Tff7b72== Tff7b72TrueTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNot sending new telemetry update, since an earlier transfer is already in progressTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffin_progressTa5d6ff"
Tff7b72if Te6edf3to_addr Tff7b72!= Tff7b72None Tff7b72and Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetry Tff7b72!= Tff7b72None Tff7b72and Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3dest_identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3to_addrTb4b4b4)
Tff7b72if Te6edf3dest_identity Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe identity for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3to_addrTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff could not be recalled. Requesting identity from network...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffrequest_pathTb4b4b4(Te6edf3to_addrTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffdestination_unknownTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3dest Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(Te6edf3dest_identityTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4, Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdeliveryTa5d6ff"Tb4b4b4)
Te6edf3source Tff7b72= Tff7b72selfTff7b72.Td2a8fflxmf_destination
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_use_propagation_onlyTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPROPAGATED
Tff7b72elseTb4b4b4:
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffDIRECT
Te6edf3lxm_fields Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_message_fieldsTb4b4b4(Te6edf3to_addrTb4b4b4)
Tff7b72if Te6edf3lxm_fields Tff7b72!= Tff7b72None Tff7b72and Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY Tff7b72in Te6edf3lxm_fieldsTb4b4b4:
Te6edf3telemeter Tff7b72= Te6edf3TelemeterTff7b72.Td2a8fffrom_packedTb4b4b4(Te6edf3lxm_fieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRYTb4b4b4]Tb4b4b4)
Te6edf3telemetry_timebase Tff7b72= Te6edf3telemeterTff7b72.Td2a8ffread_allTb4b4b4(Tb4b4b4)Tb4b4b4[Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffutcTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3telemetry_timebase Tff7b72> Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3to_addrTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.last_send_success_timebaseTa5d6ff"Tb4b4b4) Tff7b72or T79c0ff0Tb4b4b4)Tb4b4b4:
Te6edf3lxm Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTb4b4b4(Te6edf3destTb4b4b4, Te6edf3sourceTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3desired_methodTff7b72=Te6edf3desired_methodTb4b4b4, Te6edf3fields Tff7b72= Te6edf3lxm_fieldsTb4b4b4)
Te6edf3lxmTff7b72.Td2a8fftelemetry_timebase Tff7b72= Te6edf3telemetry_timebase
Te6edf3lxmTff7b72.Td2a8ffregister_delivery_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ffoutbound_telemetry_finishedTb4b4b4)
Te6edf3lxmTff7b72.Td2a8ffregister_failed_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ffoutbound_telemetry_finishedTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffget_outbound_propagation_nodeTb4b4b4(Tb4b4b4) Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_try_propagation_on_failTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3lxmTff7b72.Td2a8fftry_propagation_on_fail Tff7b72= Tff7b72True
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffSending telemetry update with timebase Tffd700{Te6edf3telemetry_timebaseTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3to_addrTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.last_send_attemptTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3to_addrTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.update_sendingTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffhandle_outboundTb4b4b4(Te6edf3lxmTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffsentTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffTelemetry update with timebase Tffd700{Te6edf3telemetry_timebaseTffd700}Ta5d6ff was already successfully sentTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffalready_sentTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffnot_sentTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffA telemetry update was requested, but there was nothing to send.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffnot_sentTa5d6ff"
Tff7b72def Td2a8fflist_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_dest Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3after Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3before Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3limit Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_db_telemetryTb4b4b4(Te6edf3context_dest Tff7b72= Te6edf3context_destTb4b4b4, Te6edf3after Tff7b72= Te6edf3afterTb4b4b4, Te6edf3before Tff7b72= Te6edf3beforeTb4b4b4, Te6edf3limit Tff7b72= Te6edf3limitTb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffpeer_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3after Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3before Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3limit Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3context_dest Tff7b72== Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhash Tff7b72and Te6edf3limit Tff7b72== T79c0ff1Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72!= Tff7b72None Tff7b72and Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetry Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4[Tff7b72selfTff7b72.Td2a8fflatest_telemetryTb4b4b4[Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffutcTa5d6ff"Tb4b4b4]Tb4b4b4, Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetryTb4b4b4]Tb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while retrieving telemetry from the database: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72tryTb4b4b4:
Te6edf3pts Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_telemetryTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3after Tff7b72= Te6edf3afterTb4b4b4, Te6edf3before Tff7b72= Te6edf3beforeTb4b4b4, Te6edf3limit Tff7b72= Te6edf3limitTb4b4b4)
Tff7b72if Te6edf3pts Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3context_dest Tff7b72in Te6edf3ptsTb4b4b4:
Tff7b72return Te6edf3ptsTb4b4b4[Te6edf3context_destTb4b4b4]
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while retrieving telemetry from the database: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffowm_locationTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffpeer_locationTb4b4b4(Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4)
Tff7b72def Td2a8ffpeer_locationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3context_dest Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72if Te6edf3context_dest Tff7b72== Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3lt Tff7b72= Tff7b72selfTff7b72.Td2a8fflatest_telemetry
Tff7b72if Ta5d6ff"Ta5d6fflocationTa5d6ff" Tff7b72in Te6edf3lt Tff7b72and Te6edf3ltTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3l Tff7b72= Te6edf3ltTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]
Tff7b72if Ta5d6ff"Ta5d6fflatitudeTa5d6ff" Tff7b72in Te6edf3l Tff7b72and Ta5d6ff"Ta5d6fflongtitudeTa5d6ff" Tff7b72in Te6edf3lTb4b4b4:
Tff7b72if Te6edf3lTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3lTb4b4b4[Ta5d6ff"Ta5d6fflongtitudeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3l
Tff7b72return Tff7b72None
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while getting own location: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3after_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72-T79c0ff3Tff7b72*T79c0ff30Tff7b72*T79c0ff24Tff7b72*T79c0ff60Tff7b72*T79c0ff60
Te6edf3pts Tff7b72= Tff7b72selfTff7b72.Td2a8ffpeer_telemetryTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3afterTff7b72=Te6edf3after_timeTb4b4b4)
Tff7b72for Te6edf3pt Tff7b72in Te6edf3ptsTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3t Tff7b72= Te6edf3TelemeterTff7b72.Td2a8fffrom_packedTb4b4b4(Te6edf3ptTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)Tff7b72.Td2a8ffread_allTb4b4b4(Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6fflocationTa5d6ff" Tff7b72in Te6edf3t Tff7b72and Te6edf3tTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3l Tff7b72= Te6edf3tTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]
Tff7b72if Ta5d6ff"Ta5d6fflatitudeTa5d6ff" Tff7b72in Te6edf3l Tff7b72and Ta5d6ff"Ta5d6fflongtitudeTa5d6ff" Tff7b72in Te6edf3lTb4b4b4:
Tff7b72if Te6edf3lTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3lTb4b4b4[Ta5d6ff"Ta5d6fflongtitudeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3l
Tff7b72exceptTb4b4b4:
Tff7b72pass
Tff7b72return Tff7b72None
Tff7b72def Td2a8fflist_messagesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3after Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3before Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3limit Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_messagesTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3afterTb4b4b4, Te6edf3beforeTb4b4b4, Te6edf3limitTb4b4b4)
Tff7b72if Te6edf3result Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3result
Tff7b72elseTb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffservice_availableTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3service_heartbeat Tff7b72= Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffservice.heartbeatTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3service_heartbeatTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3service_heartbeat Tff7b72> T79c0ff2.5Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72exceptTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffgui_foregroundTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.foregroundTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffgui_displayTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.displayingTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffgui_conversationTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.active_conversationTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffsetstateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3propTb4b4b4, Te6edf3valTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffgetstate_cacheTb4b4b4[Te6edf3propTb4b4b4] Tff7b72= Te6edf3val
Tff7b72selfTff7b72.Td2a8ff_db_setstateTb4b4b4(Te6edf3propTb4b4b4, Te6edf3valTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstate_dbTb4b4b4[Te6edf3propTb4b4b4] Tff7b72= Te6edf3val
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrpc_connection Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrpc_connection Tff7b72= Te6edf3multiprocessingTff7b72.Td2a8ffconnectionTff7b72.Td2a8ffClientTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrpc_addrTb4b4b4, Te6edf3authkeyTff7b72=Tff7b72selfTff7b72.Td2a8ffrpc_keyTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrpc_connectionTff7b72.Td2a8ffsendTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsetstateTa5d6ff"Tb4b4b4: Tb4b4b4(Te6edf3propTb4b4b4, Te6edf3valTb4b4b4)Tb4b4b4}Tb4b4b4)
Te6edf3response Tff7b72= Tff7b72selfTff7b72.Td2a8ffrpc_connectionTff7b72.Td2a8ffrecvTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3response
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while setting state over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffservice_set_latest_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3latest_telemetryTb4b4b4, Te6edf3latest_packed_telemetryTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72= Te6edf3latest_telemetry
Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetry Tff7b72= Te6edf3latest_packed_telemetry
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrpc_connection Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrpc_connection Tff7b72= Te6edf3multiprocessingTff7b72.Td2a8ffconnectionTff7b72.Td2a8ffClientTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrpc_addrTb4b4b4, Te6edf3authkeyTff7b72=Tff7b72selfTff7b72.Td2a8ffrpc_keyTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrpc_connectionTff7b72.Td2a8ffsendTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6fflatest_telemetryTa5d6ff"Tb4b4b4: Tb4b4b4(Te6edf3latest_telemetryTb4b4b4, Te6edf3latest_packed_telemetryTb4b4b4)Tb4b4b4}Tb4b4b4)
Te6edf3response Tff7b72= Tff7b72selfTff7b72.Td2a8ffrpc_connectionTff7b72.Td2a8ffrecvTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3response
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while setting telemetry over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffservice_rpc_set_debugTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3debugTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72if Te6edf3debugTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffloglevel Tff7b72= T79c0ff7
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffloglevel Tff7b72= T79c0ff2
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrpc_connection Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrpc_connection Tff7b72= Te6edf3multiprocessingTff7b72.Td2a8ffconnectionTff7b72.Td2a8ffClientTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrpc_addrTb4b4b4, Te6edf3authkeyTff7b72=Tff7b72selfTff7b72.Td2a8ffrpc_keyTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrpc_connectionTff7b72.Td2a8ffsendTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffset_debugTa5d6ff"Tb4b4b4: Te6edf3debugTb4b4b4}Tb4b4b4)
Te6edf3response Tff7b72= Tff7b72selfTff7b72.Td2a8ffrpc_connectionTff7b72.Td2a8ffrecvTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3response
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while setting log level over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffgetstateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3propTb4b4b4, Te6edf3allow_cacheTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
T8b949e# TODO: remove
T8b949e# us = time.time()
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_db_getstateTb4b4b4(Te6edf3propTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72if Te6edf3prop Tff7b72in Tff7b72selfTff7b72.Td2a8ffstate_dbTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffstate_dbTb4b4b4[Te6edf3propTb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrpc_connection Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrpc_connection Tff7b72= Te6edf3multiprocessingTff7b72.Td2a8ffconnectionTff7b72.Td2a8ffClientTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrpc_addrTb4b4b4, Te6edf3authkeyTff7b72=Tff7b72selfTff7b72.Td2a8ffrpc_keyTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrpc_connectionTff7b72.Td2a8ffsendTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffgetstateTa5d6ff"Tb4b4b4: Te6edf3propTb4b4b4}Tb4b4b4)
Te6edf3response Tff7b72= Tff7b72selfTff7b72.Td2a8ffrpc_connectionTff7b72.Td2a8ffrecvTb4b4b4(Tb4b4b4)
T8b949e# TODO: Remove
T8b949e# RNS.log("RPC getstate result for "+str(prop)+"="+str(response)+" in "+RNS.prettytime(time.time()-us), RNS.LOG_WARNING)
Tff7b72return Te6edf3response
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while retrieving state Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3propTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrpc_connection Tff7b72= Tff7b72None
Tff7b72return Tff7b72None
Tff7b72def Td2a8ff__start_rpc_listenerTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffStarting RPC listenerTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrpc_listener Tff7b72= Te6edf3multiprocessingTff7b72.Td2a8ffconnectionTff7b72.Td2a8ffListenerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrpc_addrTb4b4b4, Te6edf3authkeyTff7b72=Tff7b72selfTff7b72.Td2a8ffrpc_keyTb4b4b4)
Te6edf3thread Tff7b72= Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ff__rpc_loopTb4b4b4)
Te6edf3threadTff7b72.Td2a8ffdaemon Tff7b72= Tff7b72True
Te6edf3threadTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not start RPC listener on Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrpc_addrTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff. Terminating now. Clear up anything using the port and try again.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffpanicTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff__rpc_loopTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72while Tff7b72TrueTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffReady for next RPC clientTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3rpc_connection Tff7b72= Tff7b72selfTff7b72.Td2a8ffrpc_listenerTff7b72.Td2a8ffacceptTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAccepted RPC clientTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72def Td2a8ffjob_factoryTb4b4b4(Te6edf3connectionTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffrpc_client_jobTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72while Te6edf3connectionTb4b4b4:
Te6edf3call Tff7b72= Te6edf3connectionTff7b72.Td2a8ffrecvTb4b4b4(Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffgetstateTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3prop Tff7b72= Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffgetstateTa5d6ff"Tb4b4b4]
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Te6edf3propTb4b4b4)Tb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffsetstateTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3propTb4b4b4, Te6edf3val Tff7b72= Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffsetstateTa5d6ff"Tb4b4b4]
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Te6edf3propTb4b4b4, Te6edf3valTb4b4b4)Tb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6fflatest_telemetryTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3tTb4b4b4,Te6edf3p Tff7b72= Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6fflatest_telemetryTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72= Te6edf3t
Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetry Tff7b72= Te6edf3p
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffset_debugTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffservice_rpc_set_debugTb4b4b4(Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffset_debugTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError on client RPC connection: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3connectionTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3rpc_client_job
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3job_factoryTb4b4b4(Te6edf3rpc_connectionTb4b4b4)Tb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error ocurred while handling RPC call from local client: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ffsetpersistentTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3propTb4b4b4, Te6edf3valTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_setpersistentTb4b4b4(Te6edf3propTb4b4b4, Te6edf3valTb4b4b4)
T8b949e# def cb():
T8b949e# self._db_setpersistent(prop, val)
T8b949e# threading.Thread(target=cb, daemon=True).start()
Tff7b72def Td2a8ffgetpersistentTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3propTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_db_getpersistentTb4b4b4(Te6edf3propTb4b4b4)
Tff7b72def Td2a8ff__event_conversations_changedTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ff__event_conversation_changedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ff__db_connectTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdb Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdb Tff7b72= Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdb_pathTb4b4b4, Te6edf3check_same_threadTff7b72=Tff7b72FalseTb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ffdb
Tff7b72def Td2a8ff__db_initTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffDROP TABLE IF EXISTS lxmTa5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE TABLE lxm (lxm_hash BLOB PRIMARY KEY, dest BLOB, source BLOB, title BLOB, tx_ts INTEGER, rx_ts INTEGER, state INTEGER, method INTEGER, t_encrypted INTEGER, t_encryption INTEGER, data BLOB, extra BLOB)Ta5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffDROP TABLE IF EXISTS convTa5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE TABLE conv (dest_context BLOB PRIMARY KEY, last_tx INTEGER, last_rx INTEGER, unread INTEGER, type INTEGER, trust INTEGER, name BLOB, data BLOB)Ta5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffDROP TABLE IF EXISTS announceTa5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE TABLE announce (id PRIMARY KEY, received INTEGER, source BLOB, data BLOB, dest_type BLOB)Ta5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffDROP TABLE IF EXISTS telemetryTa5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE TABLE IF NOT EXISTS telemetry (id INTEGER PRIMARY KEY, dest_context BLOB, ts INTEGER, data BLOB)Ta5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffDROP TABLE IF EXISTS stateTa5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE TABLE state (property BLOB PRIMARY KEY, value BLOB)Ta5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffDROP TABLE IF EXISTS persistentTa5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE TABLE persistent (property BLOB PRIMARY KEY, value BLOB)Ta5d6ff"Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff__db_indicesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE UNIQUE INDEX IF NOT EXISTS idx_persistent_property ON persistent(property)Ta5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE UNIQUE INDEX IF NOT EXISTS idx_state_property ON state(property)Ta5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE UNIQUE INDEX IF NOT EXISTS idx_conv_dest_context ON conv(dest_context)Ta5d6ff"Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_inittelemetryTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE TABLE IF NOT EXISTS telemetry (id INTEGER PRIMARY KEY, dest_context BLOB, ts INTEGER, data BLOB)Ta5d6ff"Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_upgradetablesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# TODO: Remove this again at some point in the future
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffSELECT sql FROM sqlite_master WHERE type = Ta5d6ff'Ta5d6fftableTa5d6ff'Ta5d6ff AND name = Ta5d6ff'Ta5d6fflxmTa5d6ff'Ta5d6ff AND sql LIKE Ta5d6ff'Tffd700%eTa5d6ffxtraTa5d6ff%Ta5d6ff'Ta5d6ff"Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffALTER TABLE lxm ADD COLUMN extra BLOBTa5d6ff"Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_initstateTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffDROP TABLE IF EXISTS stateTa5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE TABLE state (property BLOB PRIMARY KEY, value BLOB)Ta5d6ff"Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_setstateTb4b4b4(Ta5d6ff"Ta5d6ffdatabase_readyTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ff_db_getstateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3propTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from state where property=:upropTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffupropTa5d6ff"Tb4b4b4: Te6edf3propTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4}Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72< T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3entry Tff7b72= Te6edf3resultTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3val Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
Tff7b72return Te6edf3val
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not unpack state value from database for property Tffea00\"Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3propTb4b4b4)Tff7b72+Ta5d6ff"Tffea00\"Ta5d6ff. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred during getstate database operation: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdb Tff7b72= Tff7b72None
Tff7b72def Td2a8ff_db_setstateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3propTb4b4b4, Te6edf3valTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3uprop Tff7b72= Te6edf3propTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3bval Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Te6edf3valTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_db_getstateTb4b4b4(Te6edf3propTb4b4b4) Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffINSERT INTO state (property, value) values (?, ?)Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3upropTb4b4b4, Te6edf3bvalTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while setting state property Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3propTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff in DB: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRetrying as update query...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE state set value=:bval where property=:uprop;Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffbvalTa5d6ff"Tb4b4b4: Te6edf3bvalTb4b4b4, Ta5d6ff"Ta5d6ffupropTa5d6ff"Tb4b4b4: Te6edf3upropTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE state set value=:bval where property=:uprop;Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffbvalTa5d6ff"Tb4b4b4: Te6edf3bvalTb4b4b4, Ta5d6ff"Ta5d6ffupropTa5d6ff"Tb4b4b4: Te6edf3upropTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred during setstate database operation: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdb Tff7b72= Tff7b72None
Tff7b72def Td2a8ff_db_initpersistentTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE TABLE IF NOT EXISTS persistent (property BLOB PRIMARY KEY, value BLOB)Ta5d6ff"Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_getpersistentTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3propTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from persistent where property=:upropTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffupropTa5d6ff"Tb4b4b4: Te6edf3propTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4}Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72< T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3entry Tff7b72= Te6edf3resultTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3val Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
Tff7b72if Te6edf3val Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffdelete from persistent where (property=:uprop);Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffupropTa5d6ff"Tb4b4b4: Te6edf3propTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3val
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not unpack persistent value from database for property Tffea00\"Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3propTb4b4b4)Tff7b72+Ta5d6ff"Tffea00\"Ta5d6ff. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred during persistent getstate database operation: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdb Tff7b72= Tff7b72None
Tff7b72def Td2a8ff_db_setpersistentTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3propTb4b4b4, Te6edf3valTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3uprop Tff7b72= Te6edf3propTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3bval Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Te6edf3valTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_db_getpersistentTb4b4b4(Te6edf3propTb4b4b4) Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffINSERT INTO persistent (property, value) values (?, ?)Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3upropTb4b4b4, Te6edf3bvalTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while setting persistent state property Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3propTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff in DB: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRetrying as update query...Ta5d6ff"Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE state set value=:bval where property=:uprop;Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffbvalTa5d6ff"Tb4b4b4: Te6edf3bvalTb4b4b4, Ta5d6ff"Ta5d6ffupropTa5d6ff"Tb4b4b4: Te6edf3upropTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE persistent set value=:bval where property=:uprop;Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffbvalTa5d6ff"Tb4b4b4: Te6edf3bvalTb4b4b4, Ta5d6ff"Ta5d6ffupropTa5d6ff"Tb4b4b4: Te6edf3upropTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred during persistent setstate database operation: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdb Tff7b72= Tff7b72None
Tff7b72def Td2a8ff_db_conversation_update_txtimeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set last_tx = ? where dest_context = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3context_destTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_conversation_set_unreadTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3unreadTb4b4b4, Te6edf3tx Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3unreadTb4b4b4:
Tff7b72if Te6edf3txTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set unread = ?, last_tx = ? where dest_context = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3unreadTb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3context_destTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set unread = ?, last_rx = ? where dest_context = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3unreadTb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3context_destTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set unread = ? where dest_context = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3unreadTb4b4b4, Te6edf3context_destTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_dest Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3after Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3before Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3limit Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
T8b949e# TODO: Implement limit
Te6edf3limit_part Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Te6edf3limitTb4b4b4:
Te6edf3limit_part Tff7b72= Ta5d6ff"Ta5d6ff LIMIT Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tffa657intTb4b4b4(Te6edf3limitTb4b4b4)Tb4b4b4)
Te6edf3order_part Tff7b72= Ta5d6ff"Ta5d6ff order by ts DESCTa5d6ff"Tff7b72+Te6edf3limit_part
Tff7b72if Te6edf3context_dest Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3after Tff7b72!= Tff7b72None Tff7b72and Te6edf3before Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from telemetry where ts>:after_tsTa5d6ff"Tff7b72+Te6edf3order_part
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffafter_tsTa5d6ff"Tb4b4b4: Te6edf3afterTb4b4b4}Tb4b4b4)
Tff7b72elif Te6edf3after Tff7b72== Tff7b72None Tff7b72and Te6edf3before Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from telemetry where ts<:before_tsTa5d6ff"Tff7b72+Te6edf3order_part
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffbefore_tsTa5d6ff"Tb4b4b4: Te6edf3beforeTb4b4b4}Tb4b4b4)
Tff7b72elif Te6edf3after Tff7b72!= Tff7b72None Tff7b72and Te6edf3before Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from telemetry where ts<:before_ts and ts>:after_tsTa5d6ff"Tff7b72+Te6edf3order_part
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffbefore_tsTa5d6ff"Tb4b4b4: Te6edf3beforeTb4b4b4, Ta5d6ff"Ta5d6ffafter_tsTa5d6ff"Tb4b4b4: Te6edf3afterTb4b4b4}Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3query Tff7b72= Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from telemetryTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Tb4b4b4}Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3after Tff7b72!= Tff7b72None Tff7b72and Te6edf3before Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from telemetry where dest_context=:context_dest and ts>:after_tsTa5d6ff"Tff7b72+Te6edf3order_part
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcontext_destTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4, Ta5d6ff"Ta5d6ffafter_tsTa5d6ff"Tb4b4b4: Te6edf3afterTb4b4b4}Tb4b4b4)
Tff7b72elif Te6edf3after Tff7b72== Tff7b72None Tff7b72and Te6edf3before Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from telemetry where dest_context=:context_dest and ts<:before_tsTa5d6ff"Tff7b72+Te6edf3order_part
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcontext_destTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4, Ta5d6ff"Ta5d6ffbefore_tsTa5d6ff"Tb4b4b4: Te6edf3beforeTb4b4b4}Tb4b4b4)
Tff7b72elif Te6edf3after Tff7b72!= Tff7b72None Tff7b72and Te6edf3before Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from telemetry where dest_context=:context_dest and ts<:before_ts and ts>:after_tsTa5d6ff"Tff7b72+Te6edf3order_part
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcontext_destTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4, Ta5d6ff"Ta5d6ffbefore_tsTa5d6ff"Tb4b4b4: Te6edf3beforeTb4b4b4, Ta5d6ff"Ta5d6ffafter_tsTa5d6ff"Tb4b4b4: Te6edf3afterTb4b4b4}Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3query Tff7b72= Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from telemetry where dest_context=:context_destTa5d6ff"Tff7b72+Te6edf3order_part
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcontext_destTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4}Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72< T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3results Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72for Te6edf3entry Tff7b72in Te6edf3resultTb4b4b4:
Te6edf3telemetry_source Tff7b72= Te6edf3entryTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3telemetry_timestamp Tff7b72= Te6edf3entryTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3telemetry_data Tff7b72= Te6edf3entryTb4b4b4[T79c0ff3Tb4b4b4]
Tff7b72if Tff7b72not Te6edf3telemetry_source Tff7b72in Te6edf3resultsTb4b4b4:
Te6edf3resultsTb4b4b4[Te6edf3telemetry_sourceTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3resultsTb4b4b4[Te6edf3telemetry_sourceTb4b4b4]Tff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4[Te6edf3telemetry_timestampTb4b4b4, Te6edf3telemetry_dataTb4b4b4]Tb4b4b4)
Tff7b72return Te6edf3results
Tff7b72def Td2a8ff_db_save_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3telemetryTb4b4b4, Te6edf3physical_link Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3source_dest Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3remote_telemeter Tff7b72= Te6edf3TelemeterTff7b72.Td2a8fffrom_packedTb4b4b4(Te6edf3telemetryTb4b4b4)
Te6edf3telemetry_timestamp Tff7b72= Te6edf3remote_telemeterTff7b72.Td2a8ffread_allTb4b4b4(Tb4b4b4)Tb4b4b4[Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffutcTa5d6ff"Tb4b4b4]
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from telemetry where dest_context=:ctx and ts=:ttsTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffctxTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4, Ta5d6ff"Ta5d6ffttsTa5d6ff"Tb4b4b4: Te6edf3telemetry_timestampTb4b4b4}Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72!= T79c0ff0Tb4b4b4:
Tff7b72return
Tff7b72if Te6edf3physical_link Tff7b72!= Tff7b72None Tff7b72and Tffa657lenTb4b4b4(Te6edf3physical_linkTb4b4b4) Tff7b72!= T79c0ff0Tb4b4b4:
Te6edf3remote_telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffphysical_linkTa5d6ff"Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffrssiTa5d6ff" Tff7b72in Te6edf3physical_linkTb4b4b4: Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffphysical_linkTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffrssi Tff7b72= Te6edf3physical_linkTb4b4b4[Ta5d6ff"Ta5d6ffrssiTa5d6ff"Tb4b4b4]
Tff7b72if Ta5d6ff"Ta5d6ffsnrTa5d6ff" Tff7b72in Te6edf3physical_linkTb4b4b4: Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffphysical_linkTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffsnr Tff7b72= Te6edf3physical_linkTb4b4b4[Ta5d6ff"Ta5d6ffsnrTa5d6ff"Tb4b4b4]
Tff7b72if Ta5d6ff"Ta5d6ffqTa5d6ff" Tff7b72in Te6edf3physical_linkTb4b4b4: Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffphysical_linkTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffq Tff7b72= Te6edf3physical_linkTb4b4b4[Ta5d6ff"Ta5d6ffqTa5d6ff"Tb4b4b4]
Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffphysical_linkTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_dataTb4b4b4(Tb4b4b4)
Te6edf3telemetry Tff7b72= Te6edf3remote_telemeterTff7b72.Td2a8ffpackedTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3source_dest Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3remote_telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4)
Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffby Tff7b72= Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhash
Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffvia Tff7b72= Te6edf3source_dest
Te6edf3rl Tff7b72= Te6edf3remote_telemeterTff7b72.Td2a8ffreadTb4b4b4(Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3rl Tff7b72and Ta5d6ff"Ta5d6fflatitudeTa5d6ff" Tff7b72in Te6edf3rl Tff7b72and Ta5d6ff"Ta5d6fflongtitudeTa5d6ff" Tff7b72in Te6edf3rl Tff7b72and Ta5d6ff"Ta5d6ffaltitudeTa5d6ff" Tff7b72in Te6edf3rlTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72!= Tff7b72None Tff7b72and Ta5d6ff"Ta5d6fflocationTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8fflatest_telemetryTb4b4b4:
Te6edf3ol Tff7b72= Tff7b72selfTff7b72.Td2a8fflatest_telemetryTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]
Tff7b72if Ta5d6ff"Ta5d6fflatitudeTa5d6ff" Tff7b72in Te6edf3ol Tff7b72and Ta5d6ff"Ta5d6fflongtitudeTa5d6ff" Tff7b72in Te6edf3ol Tff7b72and Ta5d6ff"Ta5d6ffaltitudeTa5d6ff" Tff7b72in Te6edf3olTb4b4b4:
Te6edf3olat Tff7b72= Te6edf3olTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4]Tb4b4b4; Te6edf3olon Tff7b72= Te6edf3olTb4b4b4[Ta5d6ff"Ta5d6fflongtitudeTa5d6ff"Tb4b4b4]Tb4b4b4; Te6edf3oalt Tff7b72= Te6edf3olTb4b4b4[Ta5d6ff"Ta5d6ffaltitudeTa5d6ff"Tb4b4b4]
Te6edf3rlat Tff7b72= Te6edf3rlTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4]Tb4b4b4; Te6edf3rlon Tff7b72= Te6edf3rlTb4b4b4[Ta5d6ff"Ta5d6fflongtitudeTa5d6ff"Tb4b4b4]Tb4b4b4; Te6edf3ralt Tff7b72= Te6edf3rlTb4b4b4[Ta5d6ff"Ta5d6ffaltitudeTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3olat Tff7b72!= Tff7b72None Tff7b72and Te6edf3olon Tff7b72!= Tff7b72None Tff7b72and Te6edf3oalt Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3rlat Tff7b72!= Tff7b72None Tff7b72and Te6edf3rlon Tff7b72!= Tff7b72None Tff7b72and Te6edf3ralt Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffset_distanceTb4b4b4(
Tb4b4b4(Te6edf3olatTb4b4b4, Te6edf3olonTb4b4b4, Te6edf3oaltTb4b4b4)Tb4b4b4, Tb4b4b4(Te6edf3rlatTb4b4b4, Te6edf3rlonTb4b4b4, Te6edf3raltTb4b4b4)
Tb4b4b4)
Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_dataTb4b4b4(Tb4b4b4)
Te6edf3telemetry Tff7b72= Te6edf3remote_telemeterTff7b72.Td2a8ffpackedTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffINSERT INTO telemetry (dest_context, ts, data) values (?, ?, ?)Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3telemetry_timestampTb4b4b4, Te6edf3telemetryTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.last_telemetryTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3telemetry
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while saving telemetry to database: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdb Tff7b72= Tff7b72None
Tff7b72def Td2a8ff_db_update_appearanceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3timestampTb4b4b4, Te6edf3appearanceTb4b4b4)Tb4b4b4:
Te6edf3conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Te6edf3data_dict Tff7b72= Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3data_dict Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3data_dict Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffappearanceTa5d6ff" Tff7b72in Te6edf3data_dictTb4b4b4:
Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffappearanceTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffappearanceTa5d6ff"Tb4b4b4] Tff7b72!= Te6edf3appearanceTb4b4b4:
Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffappearanceTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3appearance
Te6edf3packed_dict Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Te6edf3data_dictTb4b4b4)
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set data = ? where dest_context = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3packed_dictTb4b4b4, Te6edf3context_destTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_get_appearanceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3context_dest Tff7b72== Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4:
Tff7b72return Tb4b4b4[Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_iconTa5d6ff"Tb4b4b4]Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_fgTa5d6ff"Tb4b4b4]Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_bgTa5d6ff"Tb4b4b4]Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3conv Tff7b72!= Tff7b72None Tff7b72and Ta5d6ff"Ta5d6ffdataTa5d6ff" Tff7b72in Te6edf3convTb4b4b4:
Te6edf3data_dict Tff7b72= Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4]
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3data_dict Tff7b72!= Tff7b72None Tff7b72and Ta5d6ff"Ta5d6ffappearanceTa5d6ff" Tff7b72in Te6edf3data_dictTb4b4b4:
Tff7b72def Td2a8ffhtfTb4b4b4(Te6edf3cbytesTb4b4b4)Tb4b4b4:
Te6edf3d Tff7b72= T79c0ff1.0Tff7b72/T79c0ff255.0
Te6edf3r Tff7b72= Tffa657roundTb4b4b4(Te6edf3structTff7b72.Td2a8ffunpackTb4b4b4(Ta5d6ff"Ta5d6ff!BTa5d6ff"Tb4b4b4, Tffa657bytesTb4b4b4(Tb4b4b4[Te6edf3cbytesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]Tff7b72*Te6edf3dTb4b4b4, T79c0ff4Tb4b4b4)
Te6edf3g Tff7b72= Tffa657roundTb4b4b4(Te6edf3structTff7b72.Td2a8ffunpackTb4b4b4(Ta5d6ff"Ta5d6ff!BTa5d6ff"Tb4b4b4, Tffa657bytesTb4b4b4(Tb4b4b4[Te6edf3cbytesTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]Tff7b72*Te6edf3dTb4b4b4, T79c0ff4Tb4b4b4)
Te6edf3b Tff7b72= Tffa657roundTb4b4b4(Te6edf3structTff7b72.Td2a8ffunpackTb4b4b4(Ta5d6ff"Ta5d6ff!BTa5d6ff"Tb4b4b4, Tffa657bytesTb4b4b4(Tb4b4b4[Te6edf3cbytesTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]Tff7b72*Te6edf3dTb4b4b4, T79c0ff4Tb4b4b4)
Tff7b72return Tb4b4b4[Te6edf3rTb4b4b4,Te6edf3gTb4b4b4,Te6edf3bTb4b4b4]
Te6edf3appearance Tff7b72= Tb4b4b4[Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffappearanceTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3htfTb4b4b4(Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffappearanceTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3htfTb4b4b4(Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffappearanceTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)Tb4b4b4]
Tff7b72return Te6edf3appearance
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not retrieve appearance for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ff_db_conversation_set_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3send_telemetryTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Te6edf3data_dict Tff7b72= Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3data_dict Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3data_dict Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6fftelemetryTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3send_telemetry
Te6edf3packed_dict Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Te6edf3data_dictTb4b4b4)
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set data = ? where dest_context = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3packed_dictTb4b4b4, Te6edf3context_destTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_conversation_set_requestsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3allow_requestsTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Te6edf3data_dict Tff7b72= Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3data_dict Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3data_dict Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffallow_requestsTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3allow_requests
Te6edf3packed_dict Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Te6edf3data_dictTb4b4b4)
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set data = ? where dest_context = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3packed_dictTb4b4b4, Te6edf3context_destTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_conversation_set_trustedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3trustedTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set trust = ? where dest_context = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3trustedTb4b4b4, Te6edf3context_destTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_conversation_set_nameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3nameTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set name=:name_data where dest_context=:ctx;Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffctxTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4, Ta5d6ff"Ta5d6ffname_dataTa5d6ff"Tb4b4b4: Te6edf3nameTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4}Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_conversationsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffselect * from convTa5d6ff"Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72< T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3convs Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3entry Tff7b72in Te6edf3resultTb4b4b4:
Te6edf3last_rx Tff7b72= Te6edf3entryTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3last_tx Tff7b72= Te6edf3entryTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3last_activity Tff7b72= Tffa657maxTb4b4b4(Te6edf3last_rxTb4b4b4, Te6edf3last_txTb4b4b4)
Te6edf3conv Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffdestTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffunreadTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fflast_rxTa5d6ff"Tb4b4b4: Te6edf3last_rxTb4b4b4,
Ta5d6ff"Ta5d6fflast_txTa5d6ff"Tb4b4b4: Te6edf3last_txTb4b4b4,
Ta5d6ff"Ta5d6fflast_activityTa5d6ff"Tb4b4b4: Te6edf3last_activityTb4b4b4,
Tb4b4b4}
Te6edf3convsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3convTb4b4b4)
Tff7b72return Tffa657sortedTb4b4b4(Te6edf3convsTb4b4b4, Te6edf3keyTff7b72=Tff7b72lambda Te6edf3cTb4b4b4: Te6edf3cTb4b4b4[Ta5d6ff"Ta5d6fflast_activityTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3reverseTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ff_db_announcesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffselect * from announce order by received descTa5d6ff"Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72< T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3announces Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3added_dests Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3entry Tff7b72in Te6edf3resultTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72not Te6edf3entryTb4b4b4[T79c0ff2Tb4b4b4] Tff7b72in Te6edf3added_destsTb4b4b4:
Te6edf3announce Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffdestTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff3Tb4b4b4]Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff4Tb4b4b4]
Tb4b4b4}
Te6edf3added_destsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)
Te6edf3announcesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3announceTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffException while fetching announce from DB: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3announcesTff7b72.Td2a8ffreverseTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3announces
Tff7b72def Td2a8ff_db_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from conv where dest_context=:ctxTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffctxTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4}Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72< T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3c Tff7b72= Te6edf3resultTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3conv Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffdestTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6fflast_txTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3cTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6fflast_rxTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3cTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffunreadTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3cTb4b4b4[T79c0ff3Tb4b4b4]
Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3cTb4b4b4[T79c0ff4Tb4b4b4]
Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6fftrustTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3cTb4b4b4[T79c0ff5Tb4b4b4]
Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3cTb4b4b4[T79c0ff6Tb4b4b4]Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3cTb4b4b4[T79c0ff7Tb4b4b4]Tb4b4b4)
Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6fflast_activityTa5d6ff"Tb4b4b4] Tff7b72= Tffa657maxTb4b4b4(Te6edf3cTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4, Te6edf3cTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)
Tff7b72return Te6edf3conv
Tff7b72def Td2a8ff_db_clear_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffClearing conversation with Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffdelete from lxm where (dest=:ctx_dst or source=:ctx_dst);Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffctx_dstTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_clear_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffClearing telemetry for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffdelete from telemetry where dest_context=:ctx_dst;Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffctx_dstTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.last_telemetryTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ff_db_delete_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDeleting conversation with Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffdelete from conv where (dest_context=:ctx_dst);Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffctx_dstTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_delete_announceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDeleting announce with Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffdelete from announce where (source=:ctx_dst);Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffctx_dstTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_create_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3name Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3trust Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCreating conversation for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3def_name Tff7b72= Ta5d6ff"Ta5d6ff"Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffINSERT INTO conv (dest_context, last_tx, last_rx, unread, type, trust, name, data) values (?, ?, ?, ?, ?, ?, ?, ?)Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3context_destTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3SidebandCoreTff7b72.Td2a8ffCONV_P2PTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3def_nameTb4b4b4, Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Tff7b72NoneTb4b4b4)Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3trustTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_trustedTb4b4b4(Te6edf3context_destTb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Te6edf3name Tff7b72!= Tff7b72None Tff7b72and Te6edf3name Tff7b72!= Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_nameTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3nameTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__event_conversations_changedTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_delete_messageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3msg_hashTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDeleting message Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3msg_hashTb4b4b4)Tb4b4b4)
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffdelete from lxm where (lxm_hash=:mhash);Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffmhashTa5d6ff"Tb4b4b4: Te6edf3msg_hashTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_clean_messagesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffPurging stale messages... Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdb_pathTb4b4b4)Tb4b4b4)
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffdelete from lxm where (state=:outbound_state or state=:sending_state);Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffoutbound_stateTa5d6ff"Tb4b4b4: Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffOUTBOUNDTb4b4b4, Ta5d6ff"Ta5d6ffsending_stateTa5d6ff"Tb4b4b4: Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffSENDINGTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_message_set_stateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lxm_hashTb4b4b4, Te6edf3stateTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE lxm set state = ? where lxm_hash = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3stateTb4b4b4, Te6edf3lxm_hashTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_message_set_methodTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lxm_hashTb4b4b4, Te6edf3methodTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE lxm set method = ? where lxm_hash = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3methodTb4b4b4, Te6edf3lxm_hashTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffmessageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3msg_hashTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_db_messageTb4b4b4(Te6edf3msg_hashTb4b4b4)
Tff7b72def Td2a8ff_db_messageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3msg_hashTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from lxm where lxm_hash=:mhashTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffmhashTa5d6ff"Tb4b4b4: Te6edf3msg_hashTb4b4b4}Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72< T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3entry Tff7b72= Te6edf3resultTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3lxm_method Tff7b72= Te6edf3entryTb4b4b4[T79c0ff7Tb4b4b4]
Tff7b72if Te6edf3lxm_method Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPAPERTb4b4b4:
Te6edf3lxm_data Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff10Tb4b4b4]Tb4b4b4)
Te6edf3packed_lxm Tff7b72= Te6edf3lxm_dataTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3paper_packed_lxm Tff7b72= Te6edf3lxm_dataTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3packed_lxm Tff7b72= Te6edf3entryTb4b4b4[T79c0ff10Tb4b4b4]
Te6edf3lxm Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffunpack_from_bytesTb4b4b4(Te6edf3packed_lxmTb4b4b4, Te6edf3original_method Tff7b72= Te6edf3lxm_methodTb4b4b4)
Tff7b72if Te6edf3lxmTff7b72.Td2a8ffdesired_method Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPAPERTb4b4b4:
Te6edf3lxmTff7b72.Td2a8ffpaper_packed Tff7b72= Te6edf3paper_packed_lxm
Te6edf3message Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffhashTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8ffhashTb4b4b4,
Ta5d6ff"Ta5d6ffdestTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8ffdestination_hashTb4b4b4,
Ta5d6ff"Ta5d6ffsourceTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8ffsource_hashTb4b4b4,
Ta5d6ff"Ta5d6fftitleTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8fftitleTb4b4b4,
Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8ffcontentTb4b4b4,
Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff5Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffsentTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8fftimestampTb4b4b4,
Ta5d6ff"Ta5d6ffstateTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff6Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffmethodTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff7Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fflxmTa5d6ff"Tb4b4b4: Te6edf3lxm
Tb4b4b4}
Tff7b72return Te6edf3message
Tff7b72def Td2a8ff_db_message_countTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect count(*) from lxm where dest=:context_dest or source=:context_destTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcontext_destTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4}Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72< T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Tff7b72return Te6edf3resultTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72def Td2a8ff_db_messagesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3after Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3before Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3limit Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3after Tff7b72!= Tff7b72None Tff7b72and Te6edf3before Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from lxm where (dest=:context_dest or source=:context_dest) and rx_ts>:after_tsTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcontext_destTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4, Ta5d6ff"Ta5d6ffafter_tsTa5d6ff"Tb4b4b4: Te6edf3afterTb4b4b4}Tb4b4b4)
Tff7b72elif Te6edf3after Tff7b72== Tff7b72None Tff7b72and Te6edf3before Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from lxm where (dest=:context_dest or source=:context_dest) and rx_ts<:before_tsTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcontext_destTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4, Ta5d6ff"Ta5d6ffbefore_tsTa5d6ff"Tb4b4b4: Te6edf3beforeTb4b4b4}Tb4b4b4)
Tff7b72elif Te6edf3after Tff7b72!= Tff7b72None Tff7b72and Te6edf3before Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from lxm where (dest=:context_dest or source=:context_dest) and rx_ts<:before_ts and rx_ts>:after_tsTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcontext_destTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4, Ta5d6ff"Ta5d6ffbefore_tsTa5d6ff"Tb4b4b4: Te6edf3beforeTb4b4b4, Ta5d6ff"Ta5d6ffafter_tsTa5d6ff"Tb4b4b4: Te6edf3afterTb4b4b4}Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from lxm where dest=:context_dest or source=:context_destTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcontext_destTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4}Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72< T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3messages Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3entry Tff7b72in Te6edf3resultTb4b4b4:
Te6edf3lxm_method Tff7b72= Te6edf3entryTb4b4b4[T79c0ff7Tb4b4b4]
Tff7b72if Te6edf3lxm_method Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPAPERTb4b4b4:
Te6edf3lxm_data Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff10Tb4b4b4]Tb4b4b4)
Te6edf3packed_lxm Tff7b72= Te6edf3lxm_dataTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3paper_packed_lxm Tff7b72= Te6edf3lxm_dataTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3packed_lxm Tff7b72= Te6edf3entryTb4b4b4[T79c0ff10Tb4b4b4]
Te6edf3lxm Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffunpack_from_bytesTb4b4b4(Te6edf3packed_lxmTb4b4b4, Te6edf3original_method Tff7b72= Te6edf3lxm_methodTb4b4b4)
Tff7b72if Te6edf3lxmTff7b72.Td2a8ffdesired_method Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPAPERTb4b4b4:
Te6edf3lxmTff7b72.Td2a8ffpaper_packed Tff7b72= Te6edf3paper_packed_lxm
Te6edf3extras Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3extras Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff11Tb4b4b4]Tb4b4b4)
Tff7b72exceptTb4b4b4:
Tff7b72pass
Te6edf3message Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffhashTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8ffhashTb4b4b4,
Ta5d6ff"Ta5d6ffdestTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8ffdestination_hashTb4b4b4,
Ta5d6ff"Ta5d6ffsourceTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8ffsource_hashTb4b4b4,
Ta5d6ff"Ta5d6fftitleTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8fftitleTb4b4b4,
Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8ffcontentTb4b4b4,
Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff5Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffsentTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8fftimestampTb4b4b4,
Ta5d6ff"Ta5d6ffstateTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff6Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffmethodTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff7Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fflxmTa5d6ff"Tb4b4b4: Te6edf3lxmTb4b4b4,
Ta5d6ff"Ta5d6ffextrasTa5d6ff"Tb4b4b4: Te6edf3extrasTb4b4b4,
Tb4b4b4}
Te6edf3messagesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3messageTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3messagesTb4b4b4) Tff7b72> Te6edf3limitTb4b4b4:
Te6edf3messages Tff7b72= Te6edf3messagesTb4b4b4[Tff7b72-Te6edf3limitTb4b4b4:Tb4b4b4]
Tff7b72return Te6edf3messages
Tff7b72def Td2a8ff_db_save_lxmTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lxmTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3originator Tff7b72= Tff7b72FalseTb4b4b4, Te6edf3own_command Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3state Tff7b72= Te6edf3lxmTff7b72.Td2a8ffstate
Te6edf3packed_telemetry Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Te6edf3originator Tff7b72and Te6edf3lxmTff7b72.Td2a8fffields Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_receive_trusted_onlyTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72False Tff7b72or Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_receive_trusted_onlyTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72True Tff7b72and Tff7b72selfTff7b72.Td2a8ffis_trustedTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3LXMFTff7b72.Td2a8ffFIELD_ICON_APPEARANCE Tff7b72in Te6edf3lxmTff7b72.Td2a8fffieldsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_update_appearanceTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3lxmTff7b72.Td2a8fftimestampTb4b4b4, Te6edf3lxmTff7b72.Td2a8fffieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_ICON_APPEARANCETb4b4b4]Tb4b4b4)
Tff7b72if Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY Tff7b72in Te6edf3lxmTff7b72.Td2a8fffieldsTb4b4b4:
Te6edf3physical_link Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72if Te6edf3lxmTff7b72.Td2a8ffrssi Tff7b72or Te6edf3lxmTff7b72.Td2a8ffsnr Tff7b72or Te6edf3lxmTff7b72.Td2a8ffqTb4b4b4:
Te6edf3physical_linkTb4b4b4[Ta5d6ff"Ta5d6ffrssiTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3lxmTff7b72.Td2a8ffrssi
Te6edf3physical_linkTb4b4b4[Ta5d6ff"Ta5d6ffsnrTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3lxmTff7b72.Td2a8ffsnr
Te6edf3physical_linkTb4b4b4[Ta5d6ff"Ta5d6ffqTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3lxmTff7b72.Td2a8ffq
Te6edf3packed_telemetry Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_save_telemetryTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3lxmTff7b72.Td2a8fffieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRYTb4b4b4]Tb4b4b4, Te6edf3physical_linkTff7b72=Te6edf3physical_linkTb4b4b4, Te6edf3source_destTff7b72=Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY_STREAM Tff7b72in Te6edf3lxmTff7b72.Td2a8fffieldsTb4b4b4:
Tff7b72for Te6edf3telemetry_entry Tff7b72in Te6edf3lxm_fieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY_STREAMTb4b4b4]Tb4b4b4:
T8b949e# TODO: Implement
Tff7b72pass
Tff7b72if Te6edf3own_command Tff7b72or Tffa657lenTb4b4b4(Te6edf3lxmTff7b72.Td2a8ffcontentTb4b4b4) Tff7b72!= T79c0ff0 Tff7b72or Tffa657lenTb4b4b4(Te6edf3lxmTff7b72.Td2a8fftitleTb4b4b4) Tff7b72!= T79c0ff0Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3lxmTff7b72.Td2a8ffpackedTb4b4b4:
Te6edf3lxmTff7b72.Td2a8ffpackTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3lxmTff7b72.Td2a8ffmethod Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPAPERTb4b4b4:
Te6edf3packed_lxm Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Tb4b4b4[Te6edf3lxmTff7b72.Td2a8ffpackedTb4b4b4, Te6edf3lxmTff7b72.Td2a8ffpaper_packedTb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3packed_lxm Tff7b72= Te6edf3lxmTff7b72.Td2a8ffpacked
Te6edf3extras Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72if Te6edf3lxmTff7b72.Td2a8ffrssi Tff7b72or Te6edf3lxmTff7b72.Td2a8ffsnr Tff7b72or Te6edf3lxmTff7b72.Td2a8ffqTb4b4b4:
Te6edf3extrasTb4b4b4[Ta5d6ff"Ta5d6ffrssiTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3lxmTff7b72.Td2a8ffrssi
Te6edf3extrasTb4b4b4[Ta5d6ff"Ta5d6ffsnrTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3lxmTff7b72.Td2a8ffsnr
Te6edf3extrasTb4b4b4[Ta5d6ff"Ta5d6ffqTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3lxmTff7b72.Td2a8ffq
Tff7b72if Te6edf3packed_telemetry Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3extrasTb4b4b4[Ta5d6ff"Ta5d6ffpacked_telemetryTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3packed_telemetry
Te6edf3extras Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Te6edf3extrasTb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffINSERT INTO lxm (lxm_hash, dest, source, title, tx_ts, rx_ts, state, method, t_encrypted, t_encryption, data, extra) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(
Te6edf3lxmTff7b72.Td2a8ffhashTb4b4b4,
Te6edf3lxmTff7b72.Td2a8ffdestination_hashTb4b4b4,
Te6edf3lxmTff7b72.Td2a8ffsource_hashTb4b4b4,
Te6edf3lxmTff7b72.Td2a8fftitleTb4b4b4,
Te6edf3lxmTff7b72.Td2a8fftimestampTb4b4b4,
Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3stateTb4b4b4,
Te6edf3lxmTff7b72.Td2a8ffmethodTb4b4b4,
Te6edf3lxmTff7b72.Td2a8fftransport_encryptedTb4b4b4,
Te6edf3lxmTff7b72.Td2a8fftransport_encryptionTb4b4b4,
Te6edf3packed_lxmTb4b4b4,
Te6edf3extras
Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__event_conversation_changedTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72def Td2a8ff_db_save_announceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3app_dataTb4b4b4, Te6edf3dest_typeTff7b72=Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffdelete from announce where id is NULL or id not in (select id from announce order by received desc limit Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffMAX_ANNOUNCESTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff)Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffdelete from announce where (source=:source);Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffsourceTa5d6ff"Tb4b4b4: Te6edf3destination_hashTb4b4b4}Tb4b4b4)
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3hash_material Tff7b72= Tffa657strTb4b4b4(Te6edf3timeTb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tff7b72+Te6edf3destination_hashTff7b72+Te6edf3app_dataTff7b72+Te6edf3dest_typeTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3announce_hash Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8fffull_hashTb4b4b4(Te6edf3hash_materialTb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffINSERT INTO announce (id, received, source, data, dest_type) values (?, ?, ?, ?, ?)Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(
Te6edf3announce_hashTb4b4b4,
Te6edf3nowTb4b4b4,
Te6edf3destination_hashTb4b4b4,
Te6edf3app_dataTb4b4b4,
Te6edf3dest_typeTb4b4b4,
Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fflxmf_announceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3attached_interfaceTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_standalone Tff7b72or Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffannounceTb4b4b4(Te6edf3attached_interfaceTff7b72=Te6edf3attached_interfaceTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflast_lxmf_announce Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffnext_auto_announce Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72+ T79c0ff60Tff7b72*Tb4b4b4(Te6edf3randomTff7b72.Td2a8ffrandomTb4b4b4(Tb4b4b4)Tff7b72*Tb4b4b4(Te6edf3SidebandCoreTff7b72.Td2a8ffAUTO_ANNOUNCE_RANDOM_MAXTff7b72-Te6edf3SidebandCoreTff7b72.Td2a8ffAUTO_ANNOUNCE_RANDOM_MINTb4b4b4)Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNext auto announce in Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnext_auto_announceTff7b72-Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.announceTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.announceTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffrun_telemetryTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8fftelemetry_runningTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemetry_running Tff7b72= Tff7b72True
Tff7b72def Td2a8fftelemetry_jobTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72while Tff7b72selfTff7b72.Td2a8fftelemetry_runningTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdate_telemetryTb4b4b4(Tb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Te6edf3SidebandCoreTff7b72.Td2a8ffTELEMETRY_INTERVALTb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3telemetry_jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffstop_telemetryTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemetry_running Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffstop_allTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_telemeter_configTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.last_telemetryTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffupdate_telemetryTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3telemetry Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_telemetryTb4b4b4(Tb4b4b4)
Te6edf3packed_telemetry Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_packed_telemetryTb4b4b4(Tb4b4b4)
Te6edf3telemetry_changed Tff7b72= Tff7b72False
Tff7b72if Te6edf3telemetry Tff7b72!= Tff7b72None Tff7b72and Te6edf3packed_telemetry Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72== Tff7b72None Tff7b72or Tffa657lenTb4b4b4(Te6edf3telemetryTb4b4b4) Tff7b72!= Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8fflatest_telemetryTb4b4b4)Tb4b4b4:
Te6edf3telemetry_changed Tff7b72= Tff7b72True
Tff7b72for Te6edf3sn Tff7b72in Te6edf3telemetryTb4b4b4:
Tff7b72if Te6edf3telemetry_changedTb4b4b4:
Tff7b72break
Tff7b72if Te6edf3sn Tff7b72!= Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4:
Tff7b72if Te6edf3sn Tff7b72in Tff7b72selfTff7b72.Td2a8fflatest_telemetryTb4b4b4:
Tff7b72if Te6edf3telemetryTb4b4b4[Te6edf3snTb4b4b4] Tff7b72!= Tff7b72selfTff7b72.Td2a8fflatest_telemetryTb4b4b4[Te6edf3snTb4b4b4]Tb4b4b4:
Te6edf3telemetry_changed Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Te6edf3telemetry_changed Tff7b72= Tff7b72True
Tff7b72if Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72for Te6edf3sn Tff7b72in Tff7b72selfTff7b72.Td2a8fflatest_telemetryTb4b4b4:
Tff7b72if Te6edf3telemetry_changedTb4b4b4:
Tff7b72break
Tff7b72if Te6edf3sn Tff7b72!= Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3sn Tff7b72in Te6edf3telemetryTb4b4b4:
Te6edf3telemetry_changed Tff7b72= Tff7b72True
Tff7b72if Te6edf3telemetry_changedTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemetry_changes Tff7b72+Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72= Te6edf3telemetry
Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetry Tff7b72= Te6edf3packed_telemetry
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.last_telemetryTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffservice_set_latest_telemetryTb4b4b4(Tff7b72selfTff7b72.Td2a8fflatest_telemetryTb4b4b4, Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetryTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while sending latest telemetry to service: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while updating telemetry: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ffupdate_telemeter_configTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_enabledTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fftelemeter Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemeter Tff7b72= Te6edf3TelemeterTb4b4b4(Tb4b4b4)
Te6edf3sensors Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffinformationTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbatteryTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpressureTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fftemperatureTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffhumidityTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmagnetic_fieldTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffambient_lightTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffgravityTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffangular_velocityTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffaccelerationTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffproximityTa5d6ff"Tb4b4b4]
Tff7b72for Te6edf3sensor Tff7b72in Te6edf3sensorsTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_Ta5d6ff"Tff7b72+Te6edf3sensorTb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffenableTb4b4b4(Te6edf3sensorTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3sensor Tff7b72== Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4:
Tff7b72if Ta5d6ff"Ta5d6fflocationTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffactiveTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffsynthesizedTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_fixed_locationTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffdisableTb4b4b4(Te6edf3sensorTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffdisableTb4b4b4(Te6edf3sensorTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffdisableTb4b4b4(Te6edf3sensorTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_fixed_locationTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tff7b72.Td2a8fflatitude Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_fixed_latlonTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tff7b72.Td2a8fflongtitude Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_fixed_latlonTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffaltitude Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_fixed_altitudeTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffstale_time Tff7b72= T79c0ff30
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_informationTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffinformationTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffinformationTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffcontents Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_information_textTa5d6ff"Tb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemeter Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetry Tff7b72= Tff7b72None
Tff7b72def Td2a8ffget_telemetryTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_enabledTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdate_telemeter_configTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fftelemeter Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffread_allTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Tb4b4b4{Tb4b4b4}
Tff7b72elseTb4b4b4:
Tff7b72return Tb4b4b4{Tb4b4b4}
Tff7b72def Td2a8ffget_packed_telemetryTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_enabledTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdate_telemeter_configTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fftelemeter Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3packed Tff7b72= Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffpackedTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3packed
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffis_knownTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dest_hashTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3source_identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3dest_hashTb4b4b4)
Tff7b72if Te6edf3source_identityTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffrequest_keyTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dest_hashTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffrequest_pathTb4b4b4(Te6edf3dest_hashTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while querying for key: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ff_service_jobsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Te6edf3last_usb_discovery Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72while Tff7b72TrueTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Te6edf3SidebandCoreTff7b72.Td2a8ffSERVICE_JOB_INTERVALTb4b4b4)
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3announce_wanted Tff7b72= Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.announceTa5d6ff"Tb4b4b4)
Te6edf3announce_attached_interface Tff7b72= Tff7b72None
Te6edf3announce_delay Tff7b72= T79c0ff0
T8b949e# TODO: The "start_announce" config entry should be
T8b949e# renamed to "auto_announce", which is its current
T8b949e# meaning.
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffstart_announceTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Te6edf3needs_if_change_announce Tff7b72= Tff7b72False
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffinterface_localTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffinterface_local Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3have_peers Tff7b72= Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinterface_localTff7b72.Td2a8ffpeersTb4b4b4) Tff7b72> T79c0ff0
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_localTff7b72.Td2a8ffcarrier_changedTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAutoInterface carrier change detected, retaking wake locksTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffowner_serviceTff7b72.Td2a8fftake_locksTb4b4b4(Te6edf3force_multicastTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_localTff7b72.Td2a8ffcarrier_changed Tff7b72= Tff7b72False
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinterface_localTb4b4b4, Ta5d6ff"Ta5d6ffhad_peersTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffinterface_localTff7b72.Td2a8ffhad_peers Tff7b72and Te6edf3have_peersTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffPeers became reachable on the interface Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinterface_localTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3needs_if_change_announce Tff7b72= Tff7b72True
Te6edf3announce_attached_interface Tff7b72= Tff7b72selfTff7b72.Td2a8ffinterface_local
Te6edf3announce_delay Tff7b72= T79c0ff10
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_localTff7b72.Td2a8ffhad_peers Tff7b72and Tff7b72not Te6edf3have_peersTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNo peers reachable on the interface Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinterface_localTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3needs_if_change_announce Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffinterface_localTff7b72.Td2a8ffhad_peers Tff7b72= Te6edf3have_peers
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinterface_localTff7b72.Td2a8ffadopted_interfacesTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffinterface_local_addingTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNo suitable interfaces on AutoInterface, scheduling re-initTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_local Tff7b72in Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffinterfacesTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffinterfacesTff7b72.Td2a8ffremoveTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinterface_localTb4b4b4)
Tff7b72del Tff7b72selfTff7b72.Td2a8ffinterface_local
Tff7b72selfTff7b72.Td2a8ffinterface_local Tff7b72= Tff7b72None
Tff7b72def Td2a8ffjobTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__add_localinterfaceTb4b4b4(Te6edf3delayTff7b72=T79c0ff60Tb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72pass
Tff7b72for Te6edf3interface Tff7b72in Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffinterfacesTb4b4b4:
Tff7b72if Tff7b72not Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffinterface_localTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3interface Tff7b72!= Tff7b72selfTff7b72.Td2a8ffinterface_localTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3interfaceTb4b4b4, Ta5d6ff"Ta5d6ffwas_onlineTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3interfaceTff7b72.Td2a8ffwas_online Tff7b72and Te6edf3interfaceTff7b72.Td2a8ffonlineTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe interface Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3interfaceTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff became availableTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3needs_if_change_announce Tff7b72= Tff7b72True
Tff7b72if Te6edf3interfaceTff7b72.Td2a8ffwas_online Tff7b72and Tff7b72not Te6edf3interfaceTff7b72.Td2a8ffonlineTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe interface Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3interfaceTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff became unavailableTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3needs_if_change_announce Tff7b72= Tff7b72True
Te6edf3interfaceTff7b72.Td2a8ffwas_online Tff7b72= Te6edf3interfaceTff7b72.Td2a8ffonline
Tff7b72if Te6edf3needs_if_change_announce Tff7b72and Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72> Tff7b72selfTff7b72.Td2a8fflast_if_change_announceTff7b72+Te6edf3SidebandCoreTff7b72.Td2a8ffIF_CHANGE_ANNOUNCE_MIN_INTERVALTb4b4b4:
Te6edf3announce_wanted Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8fflast_if_change_announce Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72> Tff7b72selfTff7b72.Td2a8ffnext_auto_announceTb4b4b4:
Te6edf3announce_wanted Tff7b72= Tff7b72True
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffinterface_rnodeTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffinterface_rnode Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bluetoothTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffallow_bluetooth Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffallow_bluetooth Tff7b72= Tff7b72False
Tff7b72if Te6edf3announce_wantedTb4b4b4:
Tff7b72def Td2a8ffgen_announce_jobTb4b4b4(Te6edf3delayTb4b4b4, Te6edf3attached_interfaceTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffxTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3aif Tff7b72= Te6edf3announce_attached_interface
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Te6edf3delayTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflxmf_announceTb4b4b4(Te6edf3attached_interfaceTff7b72=Te6edf3aifTb4b4b4)
Tff7b72return Te6edf3x
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3gen_announce_jobTb4b4b4(Te6edf3announce_delayTb4b4b4, Te6edf3announce_attached_interfaceTb4b4b4)Tb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.bt_onTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.bt_onTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffdiscover_usb_devicesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffexecuting.bt_onTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_rnode Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffenable_bluetoothTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTb4b4b4, Ta5d6ff"Ta5d6ffusb_devicesTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devices Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3target_port Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]
Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffAndroidTff7b72.Td2a8ffRNodeInterfaceTff7b72.Td2a8ffRNodeInterfaceTff7b72.Td2a8ffbluetooth_controlTb4b4b4(Te6edf3portTff7b72=Te6edf3target_portTb4b4b4, Te6edf3enable_bluetooth Tff7b72= Tff7b72TrueTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not execute RNode Bluetooth control command, no USB devices availableTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffexecuting.bt_onTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.bt_offTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.bt_offTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffdiscover_usb_devicesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffexecuting.bt_offTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_rnode Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffdisable_bluetoothTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTb4b4b4, Ta5d6ff"Ta5d6ffusb_devicesTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devices Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3target_port Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]
Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffAndroidTff7b72.Td2a8ffRNodeInterfaceTff7b72.Td2a8ffRNodeInterfaceTff7b72.Td2a8ffbluetooth_controlTb4b4b4(Te6edf3portTff7b72=Te6edf3target_portTb4b4b4, Te6edf3disable_bluetooth Tff7b72= Tff7b72TrueTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not execute RNode Bluetooth control command, no USB devices availableTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffexecuting.bt_offTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.bt_pairTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.bt_pairTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffdiscover_usb_devicesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffexecuting.bt_pairTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_rnode Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffbluetooth_pairTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTb4b4b4, Ta5d6ff"Ta5d6ffusb_devicesTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devices Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3target_port Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]
Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffAndroidTff7b72.Td2a8ffRNodeInterfaceTff7b72.Td2a8ffRNodeInterfaceTff7b72.Td2a8ffbluetooth_controlTb4b4b4(Te6edf3portTff7b72=Te6edf3target_portTb4b4b4, Te6edf3pairing_mode Tff7b72= Tff7b72TrueTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffhardware_operation.errorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffAn error occurred while trying to communicate with the device. Please make sure that Sideband has been granted permissions to access the device.Tffea00\nTffea00\nTa5d6ffThe reported error was:Tffea00\nTffea00\nTa5d6ff[i]Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff[/i]Ta5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not execute RNode Bluetooth control command, no USB devices availableTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffexecuting.bt_pairTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3now Tff7b72- Te6edf3last_usb_discovery Tff7b72> T79c0ff5Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_rnode Tff7b72!= Tff7b72None Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffonlineTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffdiscover_usb_devicesTb4b4b4(Tb4b4b4)
Te6edf3last_usb_discovery Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTb4b4b4, Ta5d6ff"Ta5d6ffusb_devicesTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devices Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3target_device Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffport Tff7b72!= Te6edf3target_deviceTb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffUpdating RNode device to Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3target_deviceTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffport Tff7b72= Te6edf3target_deviceTb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_serial Tff7b72!= Tff7b72None Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffinterface_serialTff7b72.Td2a8ffonlineTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffdiscover_usb_devicesTb4b4b4(Tb4b4b4)
Te6edf3last_usb_discovery Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTb4b4b4, Ta5d6ff"Ta5d6ffusb_devicesTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devices Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3target_device Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_serialTff7b72.Td2a8ffport Tff7b72!= Te6edf3target_deviceTb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffUpdating serial device to Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3target_deviceTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_serialTff7b72.Td2a8ffport Tff7b72= Te6edf3target_deviceTb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_modem Tff7b72!= Tff7b72None Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffinterface_modemTff7b72.Td2a8ffonlineTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffdiscover_usb_devicesTb4b4b4(Tb4b4b4)
Te6edf3last_usb_discovery Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTb4b4b4, Ta5d6ff"Ta5d6ffusb_devicesTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devices Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3target_device Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_modemTff7b72.Td2a8ffport Tff7b72!= Te6edf3target_deviceTb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffUpdating modem device to Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3target_deviceTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_modemTff7b72.Td2a8ffport Tff7b72= Te6edf3target_deviceTb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]
Tff7b72def Td2a8ff_periodic_jobsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_service Tff7b72or Tff7b72selfTff7b72.Td2a8ffis_standaloneTb4b4b4:
Tff7b72while Tff7b72TrueTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Te6edf3SidebandCoreTff7b72.Td2a8ffPERIODIC_JOBS_INTERVALTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_periodic_syncTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.lastsyncTa5d6ff"Tb4b4b4) Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.lastsyncTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3syncinterval Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_sync_intervalTa5d6ff"Tb4b4b4]
Te6edf3lastsync Tff7b72= Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.lastsyncTa5d6ff"Tb4b4b4)
Te6edf3nextsync Tff7b72= Te6edf3lastsyncTff7b72+Te6edf3syncinterval
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLast sync was Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3nowTff7b72-Te6edf3lastsyncTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff agoTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNext sync is Ta5d6ff"Tff7b72+Tb4b4b4(Ta5d6ff"Ta5d6ffin Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3nextsyncTff7b72-Te6edf3nowTb4b4b4) Tff7b72if Te6edf3nextsyncTff7b72-Te6edf3now Tff7b72> T79c0ff0 Tff7b72else Ta5d6ff"Ta5d6ffnowTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Te6edf3now Tff7b72> Te6edf3nextsyncTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrequest_lxmf_syncTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffScheduled LXMF sync succeededTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.lastsyncTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.syncretryingTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.syncretryingTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffScheduled LXMF sync failed, retrying in Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3SidebandCoreTff7b72.Td2a8ffPERIODIC_SYNC_RETRYTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.lastsyncTa5d6ff"Tb4b4b4, Te6edf3lastsyncTff7b72+Te6edf3SidebandCoreTff7b72.Td2a8ffPERIODIC_SYNC_RETRYTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.syncretryingTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRetry of scheduled LXMF sync failed too, waiting until next scheduled sync to try againTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.lastsyncTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.syncretryingTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_enabledTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_to_collectorTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3collector_address Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff"Tb4b4b4]
Te6edf3last_send_timebase Tff7b72= Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3collector_addressTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.last_send_success_timebaseTa5d6ff"Tb4b4b4) Tff7b72or T79c0ff0
Te6edf3send_interval Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_intervalTa5d6ff"Tb4b4b4]
Te6edf3next_send Tff7b72= Te6edf3last_send_timebaseTff7b72+Te6edf3send_interval
Te6edf3scheduled Tff7b72= Te6edf3next_sendTff7b72-Te6edf3nowTb4b4b4; Te6edf3blocked Tff7b72= Tff7b72selfTff7b72.Td2a8fftelemetry_send_blocked_untilTff7b72-Te6edf3now
Te6edf3next_send_in Tff7b72= Tffa657maxTb4b4b4(Te6edf3scheduledTb4b4b4, Te6edf3blockedTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLast telemetry send was Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3nowTff7b72-Te6edf3last_send_timebaseTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff agoTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNext telemetry send is Ta5d6ff"Tff7b72+Tb4b4b4(Ta5d6ff"Ta5d6ffin Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3next_send_inTb4b4b4) Tff7b72if Te6edf3next_send_in Tff7b72> T79c0ff0 Tff7b72else Ta5d6ff"Ta5d6ffnowTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Te6edf3now Tff7b72> Te6edf3last_send_timebaseTff7b72+Te6edf3send_interval Tff7b72and Te6edf3now Tff7b72> Tff7b72selfTff7b72.Td2a8fftelemetry_send_blocked_untilTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffInitiating telemetry send to collectorTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send_try Tff7b72>Tff7b72= Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send_maxtriesTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send_try Tff7b72+Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8ffsend_latest_telemetryTb4b4b4(Te6edf3to_addrTff7b72=Te6edf3collector_addressTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fftelemetry_send_blocked_until Tff7b72< Te6edf3nowTb4b4b4:
Te6edf3next_slot Tff7b72= Te6edf3nowTff7b72+Te6edf3send_interval
Tff7b72selfTff7b72.Td2a8fftelemetry_send_blocked_until Tff7b72= Te6edf3next_slot
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffSending telemetry to collector failed after Tffd700{Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send_tryTffd700}Ta5d6ff tries.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffNot scheduling further retries until next send slot in Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3next_slotTff7b72-Te6edf3nowTb4b4b4)Tffd700}Ta5d6ff.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send_try Tff7b72= T79c0ff0
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while sending scheduled telemetry to collector: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_request_from_collectorTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3collector_address Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff"Tb4b4b4]
Te6edf3last_request_timebase Tff7b72= Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3collector_addressTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.last_request_success_timebaseTa5d6ff"Tb4b4b4) Tff7b72or T79c0ff0
Te6edf3request_interval Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_request_intervalTa5d6ff"Tb4b4b4]
Te6edf3next_request Tff7b72= Te6edf3last_request_timebaseTff7b72+Te6edf3request_interval
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLast telemetry request was Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3nowTff7b72-Te6edf3last_request_timebaseTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff agoTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNext telemetry request is Ta5d6ff"Tff7b72+Tb4b4b4(Ta5d6ff"Ta5d6ffin Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3next_requestTff7b72-Te6edf3nowTb4b4b4) Tff7b72if Te6edf3next_requestTff7b72-Te6edf3now Tff7b72> T79c0ff0 Tff7b72else Ta5d6ff"Ta5d6ffnowTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Te6edf3now Tff7b72> Te6edf3last_request_timebaseTff7b72+Te6edf3request_intervalTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffInitiating telemetry request to collectorTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while requesting scheduled telemetry from collector: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ff__start_jobs_deferredTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffservice_thread Tff7b72= Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ff_service_jobsTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffservice_threadTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_standalone Tff7b72or Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffstart_announceTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fflxmf_announceTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflast_if_change_announce Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffperiodic_thread Tff7b72= Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ff_periodic_jobsTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffperiodic_threadTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_standalone Tff7b72or Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_enabledTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrun_telemetryTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff__add_localinterfaceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3delayTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_local_adding Tff7b72= Tff7b72True
Tff7b72if Te6edf3delayTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Te6edf3delayTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAdding Auto Interface...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_groupidTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3group_id Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3group_id Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_groupidTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_ifac_netnameTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_ifac_passphraseTa5d6ff"Tb4b4b4]
Te6edf3autointerface Tff7b72= Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffAutoInterfaceTff7b72.Td2a8ffAutoInterfaceTb4b4b4(
Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4,
Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffAutoInterfaceTa5d6ff"Tb4b4b4,
Te6edf3group_id Tff7b72= Te6edf3group_id
Tb4b4b4)
Te6edf3autointerfaceTff7b72.Td2a8ffOUT Tff7b72= Tff7b72True
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8fftransport_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_FULL
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_localTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffgatewayTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_GATEWAY
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_localTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffaccess pointTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ACCESS_POINT
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_localTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffroamingTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ROAMING
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_localTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffboundaryTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_BOUNDARY
Tff7b72elseTb4b4b4:
Te6edf3if_mode Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ff_add_interfaceTb4b4b4(Te6edf3autointerfaceTb4b4b4, Te6edf3mode Tff7b72= Te6edf3if_modeTb4b4b4, Te6edf3ifac_netname Tff7b72= Te6edf3ifac_netnameTb4b4b4, Te6edf3ifac_netkey Tff7b72= Te6edf3ifac_netkeyTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_local Tff7b72= Te6edf3autointerface
Tff7b72selfTff7b72.Td2a8ffinterface_local_adding Tff7b72= Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while adding AutoInterface. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_local Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffinterface_local_adding Tff7b72= Tff7b72False
Tff7b72def Td2a8ff_reticulum_log_debugTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3debugTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fflog_verbose Tff7b72= Te6edf3debug
Tff7b72if Tff7b72selfTff7b72.Td2a8fflog_verboseTb4b4b4:
Te6edf3selected_level Tff7b72= T79c0ff7
Tff7b72elseTb4b4b4:
Te6edf3selected_level Tff7b72= T79c0ff2
Te6edf3RNSTff7b72.Td2a8ffloglevel Tff7b72= Te6edf3selected_level
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffservice_rpc_set_debugTb4b4b4(Te6edf3debugTb4b4b4)
Tff7b72def Td2a8ff__start_jobs_immediateTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflog_verboseTb4b4b4:
Te6edf3selected_level Tff7b72= T79c0ff7
Tff7b72elseTb4b4b4:
Te6edf3selected_level Tff7b72= T79c0ff2
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffinit.loadingstateTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffSubstantiating ReticulumTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffreticulum Tff7b72= Te6edf3RNSTff7b72.Td2a8ffReticulumTb4b4b4(Te6edf3configdirTff7b72=Tff7b72selfTff7b72.Td2a8ffrns_configdirTb4b4b4, Te6edf3loglevelTff7b72=Te6edf3selected_levelTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__start_rpc_listenerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
T8b949e# TODO: Just log to console for, but add option to export log
T8b949e# files at some point.
T8b949e# if self.config["debug"]:
T8b949e# self.reticulum.logdest = RNS.LOG_FILE
T8b949e# if not self.reticulum.is_connected_to_shared_instance:
T8b949e# self.reticulum.logfile = self.log_dir+"sideband_service.log"
T8b949e# else:
T8b949e# self.reticulum.logfile = self.log_dir+"sideband_core.log"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ffis_connected_to_shared_instanceTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRunning as master or standalone instance, adding interfacesTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_local Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffinterface_tcp Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffinterface_i2p Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffinterface_rnode Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffinterface_modem Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffinterface_serial Tff7b72= Tff7b72None
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_localTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffinit.loadingstateTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffDiscovering TopographyTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__add_localinterfaceTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcpTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffinit.loadingstateTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffConnecting TCP TunnelTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAdding TCP Interface...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_hostTa5d6ff"Tb4b4b4] Tff7b72!= Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3tcp_host Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_hostTa5d6ff"Tb4b4b4]
Te6edf3tcp_port Tff7b72= Tffa657intTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_portTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72if Te6edf3tcp_port Tff7b72> T79c0ff0 Tff7b72and Te6edf3tcp_port Tff7b72<Tff7b72= T79c0ff65536Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_ifac_netnameTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_ifac_passphraseTa5d6ff"Tb4b4b4]
Te6edf3tcpinterface Tff7b72= Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffTCPInterfaceTff7b72.Td2a8ffTCPClientInterfaceTb4b4b4(
Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4,
Ta5d6ff"Ta5d6ffTCPClientInterfaceTa5d6ff"Tb4b4b4,
Te6edf3tcp_hostTb4b4b4,
Te6edf3tcp_portTb4b4b4,
Te6edf3kiss_framing Tff7b72= Tff7b72FalseTb4b4b4,
Te6edf3i2p_tunneled Tff7b72= Tff7b72False
Tb4b4b4)
Te6edf3tcpinterfaceTff7b72.Td2a8ffOUT Tff7b72= Tff7b72True
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8fftransport_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_FULL
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_tcpTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffgatewayTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_GATEWAY
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_tcpTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffaccess pointTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ACCESS_POINT
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_tcpTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffroamingTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ROAMING
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_tcpTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffboundaryTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_BOUNDARY
Tff7b72elseTb4b4b4:
Te6edf3if_mode Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ff_add_interfaceTb4b4b4(Te6edf3tcpinterfaceTb4b4b4, Te6edf3modeTff7b72=Te6edf3if_modeTb4b4b4, Te6edf3ifac_netnameTff7b72=Te6edf3ifac_netnameTb4b4b4, Te6edf3ifac_netkeyTff7b72=Te6edf3ifac_netkeyTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_tcp Tff7b72= Te6edf3tcpinterface
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while adding TCP Interface. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_tcp Tff7b72= Tff7b72None
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2pTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffinit.loadingstateTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffOpening I2P EndpointsTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAdding I2P Interface...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_b32Ta5d6ff"Tb4b4b4]Tff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ff.b32.i2pTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_ifac_netnameTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_ifac_passphraseTa5d6ff"Tb4b4b4]
Te6edf3i2pinterface Tff7b72= Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffI2PInterfaceTff7b72.Td2a8ffI2PInterfaceTb4b4b4(
Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4,
Ta5d6ff"Ta5d6ffI2PInterfaceTa5d6ff"Tb4b4b4,
Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffstoragepathTb4b4b4,
Tb4b4b4[Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_b32Ta5d6ff"Tb4b4b4]Tb4b4b4]Tb4b4b4,
Te6edf3connectable Tff7b72= Tff7b72FalseTb4b4b4,
Tb4b4b4)
Te6edf3i2pinterfaceTff7b72.Td2a8ffOUT Tff7b72= Tff7b72True
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8fftransport_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_FULL
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_i2pTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffgatewayTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_GATEWAY
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_i2pTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffaccess pointTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ACCESS_POINT
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_i2pTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffroamingTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ROAMING
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_i2pTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffboundaryTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_BOUNDARY
Tff7b72elseTb4b4b4:
Te6edf3if_mode Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ff_add_interfaceTb4b4b4(Te6edf3i2pinterfaceTb4b4b4, Te6edf3mode Tff7b72= Te6edf3if_modeTb4b4b4, Te6edf3ifac_netnameTff7b72=Te6edf3ifac_netnameTb4b4b4, Te6edf3ifac_netkeyTff7b72=Te6edf3ifac_netkeyTb4b4b4)
Tff7b72for Te6edf3si Tff7b72in Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffinterfacesTb4b4b4:
Tff7b72if Tffa657typeTb4b4b4(Te6edf3siTb4b4b4) Tff7b72== Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffI2PInterfaceTff7b72.Td2a8ffI2PInterfacePeerTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_i2p Tff7b72= Te6edf3si
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while adding I2P Interface. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_i2p Tff7b72= Tff7b72None
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnodeTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffinit.loadingstateTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffStarting RNodeTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAdding RNode Interface...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3target_device Tff7b72= Tff7b72None
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
T8b949e# TODO: Add more intelligent selection here
Te6edf3target_device Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4[T79c0ff0Tb4b4b4]
T8b949e# if target_device or self.config["hw_rnode_bluetooth"]:
Tff7b72if Te6edf3target_device Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3target_port Tff7b72= Te6edf3target_deviceTb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3target_port Tff7b72= Tff7b72None
Te6edf3bt_device_name Tff7b72= Tff7b72None
Te6edf3rnode_allow_bluetooth Tff7b72= Tff7b72False
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6ff"Ta5d6ffpermissions.bluetoothTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bluetoothTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAllowing RNode bluetoothTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3rnode_allow_bluetooth Tff7b72= Tff7b72True
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bt_deviceTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3bt_device_name Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bt_deviceTa5d6ff"Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDisallowing RNode bluetooth since config is disabledTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3rnode_allow_bluetooth Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDisallowing RNode bluetooth due to missing permissionTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3rnode_allow_bluetooth Tff7b72= Tff7b72False
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnode_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnode_ifac_netnameTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnode_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnode_ifac_passphraseTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_atl_shortTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3atl_short Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3atl_short Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_atl_shortTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_atl_longTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3atl_long Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3atl_long Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_atl_longTa5d6ff"Tb4b4b4]
Te6edf3rnodeinterface Tff7b72= Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffAndroidTff7b72.Td2a8ffRNodeInterfaceTff7b72.Td2a8ffRNodeInterfaceTb4b4b4(
Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4,
Ta5d6ff"Ta5d6ffRNodeInterfaceTa5d6ff"Tb4b4b4,
Te6edf3target_portTb4b4b4,
Te6edf3frequency Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_frequencyTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3bandwidth Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bandwidthTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3txpower Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_tx_powerTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3sf Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_spreading_factorTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3cr Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_coding_rateTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3flow_control Tff7b72= Tff7b72NoneTb4b4b4,
Te6edf3id_interval Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_beaconintervalTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3id_callsign Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_beacondataTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3allow_bluetooth Tff7b72= Te6edf3rnode_allow_bluetoothTb4b4b4,
Te6edf3target_device_name Tff7b72= Te6edf3bt_device_nameTb4b4b4,
Te6edf3st_alock Tff7b72= Te6edf3atl_shortTb4b4b4,
Te6edf3lt_alock Tff7b72= Te6edf3atl_longTb4b4b4,
Tb4b4b4)
Te6edf3rnodeinterfaceTff7b72.Td2a8ffOUT Tff7b72= Tff7b72True
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8fftransport_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_FULL
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_rnodeTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffgatewayTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_GATEWAY
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_rnodeTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffaccess pointTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ACCESS_POINT
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_rnodeTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffroamingTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ROAMING
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_rnodeTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffboundaryTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_BOUNDARY
Tff7b72elseTb4b4b4:
Te6edf3if_mode Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ff_add_interfaceTb4b4b4(Te6edf3rnodeinterfaceTb4b4b4, Te6edf3mode Tff7b72= Te6edf3if_modeTb4b4b4, Te6edf3ifac_netname Tff7b72= Te6edf3ifac_netnameTb4b4b4, Te6edf3ifac_netkey Tff7b72= Te6edf3ifac_netkeyTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_rnode Tff7b72= Te6edf3rnodeinterface
Tff7b72if Te6edf3rnodeinterface Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3rnodeinterfaceTff7b72.Td2a8ffhw_errorsTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6ffstartup.errors.rnodeTa5d6ff"Tb4b4b4, Te6edf3rnodeinterfaceTff7b72.Td2a8ffhw_errorsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_enable_framebufferTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffonlineTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffdisplay_imageTb4b4b4(Te6edf3sideband_fb_dataTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffenable_external_framebufferTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8fflast_imagedata Tff7b72= Te6edf3sideband_fb_data
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffonlineTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffdisable_external_framebufferTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while adding RNode Interface. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_rnode Tff7b72= Tff7b72None
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serialTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffinit.loadingstateTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffStarting Serial InterfaceTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAdding Serial Interface...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3target_device Tff7b72= Tff7b72None
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
T8b949e# TODO: Add more intelligent selection here
Te6edf3target_device Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Te6edf3target_deviceTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serial_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serial_ifac_netnameTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serial_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serial_ifac_passphraseTa5d6ff"Tb4b4b4]
Te6edf3serialinterface Tff7b72= Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffAndroidTff7b72.Td2a8ffSerialInterfaceTff7b72.Td2a8ffSerialInterfaceTb4b4b4(
Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4,
Ta5d6ff"Ta5d6ffSerialInterfaceTa5d6ff"Tb4b4b4,
Te6edf3target_deviceTb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_baudrateTa5d6ff"Tb4b4b4]Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_databitsTa5d6ff"Tb4b4b4]Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_parityTa5d6ff"Tb4b4b4]Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_stopbitsTa5d6ff"Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Te6edf3serialinterfaceTff7b72.Td2a8ffOUT Tff7b72= Tff7b72True
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8fftransport_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_FULL
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_serialTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffgatewayTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_GATEWAY
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_serialTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffaccess pointTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ACCESS_POINT
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_serialTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffroamingTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ROAMING
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_serialTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffboundaryTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_BOUNDARY
Tff7b72elseTb4b4b4:
Te6edf3if_mode Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ff_add_interfaceTb4b4b4(Te6edf3serialinterfaceTb4b4b4, Te6edf3mode Tff7b72= Te6edf3if_modeTb4b4b4, Te6edf3ifac_netname Tff7b72= Te6edf3ifac_netnameTb4b4b4, Te6edf3ifac_netkey Tff7b72= Te6edf3ifac_netkeyTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_serial Tff7b72= Te6edf3serialinterface
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while adding Serial Interface. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_serial Tff7b72= Tff7b72None
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modemTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffinit.loadingstateTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffStarting Radio ModemTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAdding Modem Interface...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3target_device Tff7b72= Tff7b72None
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
T8b949e# TODO: Add more intelligent selection here
Te6edf3target_device Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Te6edf3target_deviceTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modem_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modem_ifac_netnameTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modem_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modem_ifac_passphraseTa5d6ff"Tb4b4b4]
Te6edf3modeminterface Tff7b72= Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffAndroidTff7b72.Td2a8ffKISSInterfaceTff7b72.Td2a8ffKISSInterfaceTb4b4b4(
Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4,
Ta5d6ff"Ta5d6ffModemInterfaceTa5d6ff"Tb4b4b4,
Te6edf3target_deviceTb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_baudrateTa5d6ff"Tb4b4b4]Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_databitsTa5d6ff"Tb4b4b4]Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_parityTa5d6ff"Tb4b4b4]Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_stopbitsTa5d6ff"Tb4b4b4]Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_preambleTa5d6ff"Tb4b4b4]Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_tailTa5d6ff"Tb4b4b4]Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_persistenceTa5d6ff"Tb4b4b4]Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_slottimeTa5d6ff"Tb4b4b4]Tb4b4b4,
Tff7b72FalseTb4b4b4, T8b949e# flow control
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_beaconintervalTa5d6ff"Tb4b4b4]Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_beacondataTa5d6ff"Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Te6edf3modeminterfaceTff7b72.Td2a8ffOUT Tff7b72= Tff7b72True
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8fftransport_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_FULL
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_modemTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffgatewayTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_GATEWAY
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_modemTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffaccess pointTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ACCESS_POINT
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_modemTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffroamingTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ROAMING
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_modemTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffboundaryTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_BOUNDARY
Tff7b72elseTb4b4b4:
Te6edf3if_mode Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ff_add_interfaceTb4b4b4(Te6edf3modeminterfaceTb4b4b4, Te6edf3mode Tff7b72= Te6edf3if_modeTb4b4b4, Te6edf3ifac_netname Tff7b72= Te6edf3ifac_netnameTb4b4b4, Te6edf3ifac_netkey Tff7b72= Te6edf3ifac_netkeyTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_modem Tff7b72= Te6edf3modeminterface
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while adding Modem Interface. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_modem Tff7b72= Tff7b72None
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffReticulum started, activating LXMF...Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffinit.loadingstateTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffActivating LXMF RouterTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessage_router Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTb4b4b4(Te6edf3identity Tff7b72= Tff7b72selfTff7b72.Td2a8ffidentityTb4b4b4, Te6edf3storagepath Tff7b72= Tff7b72selfTff7b72.Td2a8fflxmf_storageTb4b4b4, Te6edf3autopeer Tff7b72= Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffregister_delivery_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8fflxmf_deliveryTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflxmf_destination Tff7b72= Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffregister_delivery_identityTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentityTb4b4b4, Te6edf3display_nameTff7b72=Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdisplay_nameTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffset_default_app_dataTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_display_name_bytesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrns_dir Tff7b72= Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffconfigdir
Tff7b72selfTff7b72.Td2a8ffupdate_active_lxmf_propagation_nodeTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffupdate_active_lxmf_propagation_nodeTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_propagation_nodeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_propagation_nodeTa5d6ff"Tb4b4b4] Tff7b72!= Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffset_active_propagation_nodeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_propagation_nodeTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflast_lxmf_propagation_nodeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflast_lxmf_propagation_nodeTa5d6ff"Tb4b4b4] Tff7b72!= Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffset_active_propagation_nodeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflast_lxmf_propagation_nodeTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffset_active_propagation_nodeTb4b4b4(Tff7b72NoneTb4b4b4)
Tff7b72def Td2a8ffmessage_notificationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3messageTff7b72.Td2a8ffstate Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffFAILED Tff7b72and Tffa657hasattrTb4b4b4(Te6edf3messageTb4b4b4, Ta5d6ff"Ta5d6fftry_propagation_on_failTa5d6ff"Tb4b4b4) Tff7b72and Te6edf3messageTff7b72.Td2a8fftry_propagation_on_failTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDirect delivery of Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3messageTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff failed. Retrying as propagated message.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_VERBOSETb4b4b4)
Te6edf3messageTff7b72.Td2a8fftry_propagation_on_fail Tff7b72= Tff7b72None
Te6edf3messageTff7b72.Td2a8ffdelivery_attempts Tff7b72= T79c0ff0
Tff7b72del Te6edf3messageTff7b72.Td2a8ffnext_delivery_attempt
Te6edf3messageTff7b72.Td2a8ffpacked Tff7b72= Tff7b72None
Te6edf3messageTff7b72.Td2a8ffdesired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPROPAGATED
Tff7b72selfTff7b72.Td2a8ff_db_message_set_methodTb4b4b4(Te6edf3messageTff7b72.Td2a8ffhashTb4b4b4, Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPROPAGATEDTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffhandle_outboundTb4b4b4(Te6edf3messageTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflxm_ingestTb4b4b4(Te6edf3messageTb4b4b4, Te6edf3originatorTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffget_message_fieldsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3telemetry_updateTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3fields Tff7b72= Tff7b72None
Te6edf3send_telemetry Tff7b72= Tb4b4b4(Te6edf3telemetry_update Tff7b72== Tff7b72TrueTb4b4b4) Tff7b72or Tff7b72selfTff7b72.Td2a8ffshould_send_telemetryTb4b4b4(Te6edf3context_destTb4b4b4)
Te6edf3send_appearance Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_appearanceTa5d6ff"Tb4b4b4] Tff7b72or Te6edf3send_telemetry
Tff7b72if Te6edf3send_telemetry Tff7b72or Te6edf3send_appearanceTb4b4b4:
Te6edf3fields Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72if Te6edf3send_appearanceTb4b4b4:
Tff7b72def Td2a8fffthTb4b4b4(Te6edf3cTb4b4b4)Tb4b4b4:
Te6edf3r Tff7b72= Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4; Te6edf3g Tff7b72= Te6edf3cTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4; Te6edf3b Tff7b72= Te6edf3cTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3r Tff7b72= Tffa657minTb4b4b4(Tffa657maxTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3rTb4b4b4)Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4; Te6edf3g Tff7b72= Tffa657minTb4b4b4(Tffa657maxTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3gTb4b4b4)Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4; Te6edf3b Tff7b72= Tffa657minTb4b4b4(Tffa657maxTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3bTb4b4b4)Tb4b4b4, T79c0ff1Tb4b4b4)
Te6edf3d Tff7b72= T79c0ff1.0Tff7b72/T79c0ff255.0
Tff7b72return Te6edf3structTff7b72.Td2a8ffpackTb4b4b4(Ta5d6ff"Ta5d6ff!BBBTa5d6ff"Tb4b4b4, Tffa657intTb4b4b4(Te6edf3rTff7b72/Te6edf3dTb4b4b4)Tb4b4b4, Tffa657intTb4b4b4(Te6edf3gTff7b72/Te6edf3dTb4b4b4)Tb4b4b4, Tffa657intTb4b4b4(Te6edf3bTff7b72/Te6edf3dTb4b4b4)Tb4b4b4)
Te6edf3icon Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_iconTa5d6ff"Tb4b4b4]
Te6edf3fg Tff7b72= Te6edf3fthTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_fgTa5d6ff"Tb4b4b4]Tb4b4b4[Tb4b4b4:Tff7b72-T79c0ff1Tb4b4b4]Tb4b4b4)
Te6edf3bg Tff7b72= Te6edf3fthTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_bgTa5d6ff"Tb4b4b4]Tb4b4b4[Tb4b4b4:Tff7b72-T79c0ff1Tb4b4b4]Tb4b4b4)
Te6edf3fieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_ICON_APPEARANCETb4b4b4] Tff7b72= Tb4b4b4[Te6edf3iconTb4b4b4, Te6edf3fgTb4b4b4, Te6edf3bgTb4b4b4]
Tff7b72if Te6edf3send_telemetryTb4b4b4:
Te6edf3fieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRYTb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetry
Tff7b72return Te6edf3fields
Tff7b72def Td2a8ffpaper_messageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3content Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMessage content cannot be emptyTa5d6ff"Tb4b4b4)
Te6edf3dest_identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3destination_hashTb4b4b4)
Te6edf3dest Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(Te6edf3dest_identityTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4, Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdeliveryTa5d6ff"Tb4b4b4)
Te6edf3source Tff7b72= Tff7b72selfTff7b72.Td2a8fflxmf_destination
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPAPER
Te6edf3lxm Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTb4b4b4(Te6edf3destTb4b4b4, Te6edf3sourceTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3desired_methodTff7b72=Te6edf3desired_methodTb4b4b4, Te6edf3fields Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_message_fieldsTb4b4b4(Te6edf3destination_hashTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflxm_ingestTb4b4b4(Te6edf3lxmTb4b4b4, Te6edf3originatorTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while creating paper message: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffsend_messageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3propagationTb4b4b4, Te6edf3skip_fieldsTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3content Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMessage content cannot be emptyTa5d6ff"Tb4b4b4)
Te6edf3dest_identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3destination_hashTb4b4b4)
Te6edf3dest Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(Te6edf3dest_identityTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4, Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdeliveryTa5d6ff"Tb4b4b4)
Te6edf3source Tff7b72= Tff7b72selfTff7b72.Td2a8fflxmf_destination
Tff7b72if Te6edf3propagationTb4b4b4:
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPROPAGATED
Tff7b72elseTb4b4b4:
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffDIRECT
Tff7b72if Te6edf3skip_fieldsTb4b4b4:
Te6edf3fields Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72elseTb4b4b4:
Te6edf3fields Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_message_fieldsTb4b4b4(Te6edf3destination_hashTb4b4b4)
Te6edf3lxm Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTb4b4b4(Te6edf3destTb4b4b4, Te6edf3sourceTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3desired_methodTff7b72=Te6edf3desired_methodTb4b4b4, Te6edf3fields Tff7b72= Te6edf3fieldsTb4b4b4)
Te6edf3lxmTff7b72.Td2a8ffregister_delivery_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmessage_notificationTb4b4b4)
Te6edf3lxmTff7b72.Td2a8ffregister_failed_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmessage_notificationTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffget_outbound_propagation_nodeTb4b4b4(Tb4b4b4) Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_try_propagation_on_failTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3lxmTff7b72.Td2a8fftry_propagation_on_fail Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffhandle_outboundTb4b4b4(Te6edf3lxmTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflxm_ingestTb4b4b4(Te6edf3lxmTb4b4b4, Te6edf3originatorTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while sending message: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffsend_commandTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3propagationTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3content Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72return Tff7b72False
Te6edf3commands Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72if Te6edf3contentTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffecho Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3echo_content Tff7b72= Te6edf3contentTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ffecho Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3echo_contentTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3commandsTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4{Te6edf3CommandsTff7b72.Td2a8ffECHOTb4b4b4: Te6edf3echo_contentTb4b4b4}Tb4b4b4)
Tff7b72elif Te6edf3contentTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffsigTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3commandsTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4{Te6edf3CommandsTff7b72.Td2a8ffSIGNAL_REPORTTb4b4b4: Tff7b72TrueTb4b4b4}Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3commandsTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72return Tff7b72False
Te6edf3dest_identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3destination_hashTb4b4b4)
Te6edf3dest Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(Te6edf3dest_identityTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4, Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdeliveryTa5d6ff"Tb4b4b4)
Te6edf3source Tff7b72= Tff7b72selfTff7b72.Td2a8fflxmf_destination
Tff7b72if Te6edf3propagationTb4b4b4:
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPROPAGATED
Tff7b72elseTb4b4b4:
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffDIRECT
Te6edf3lxm Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTb4b4b4(Te6edf3destTb4b4b4, Te6edf3sourceTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3desired_methodTff7b72=Te6edf3desired_methodTb4b4b4, Te6edf3fields Tff7b72= Tb4b4b4{Te6edf3LXMFTff7b72.Td2a8ffFIELD_COMMANDSTb4b4b4: Te6edf3commandsTb4b4b4}Tb4b4b4)
Te6edf3lxmTff7b72.Td2a8ffregister_delivery_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmessage_notificationTb4b4b4)
Te6edf3lxmTff7b72.Td2a8ffregister_failed_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmessage_notificationTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffget_outbound_propagation_nodeTb4b4b4(Tb4b4b4) Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_try_propagation_on_failTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3lxmTff7b72.Td2a8fftry_propagation_on_fail Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffhandle_outboundTb4b4b4(Te6edf3lxmTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflxm_ingestTb4b4b4(Te6edf3lxmTb4b4b4, Te6edf3originatorTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while sending message: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffnew_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dest_strTb4b4b4, Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3trusted Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3dest_strTb4b4b4) Tff7b72!= Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tff7b72*T79c0ff2Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72tryTb4b4b4:
Te6edf3addr_b Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3dest_strTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_create_conversationTb4b4b4(Te6edf3addr_bTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3trustedTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while creating conversation: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72return Tff7b72True
Tff7b72def Td2a8ffcreate_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3name Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3trusted Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_create_conversationTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3trustedTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while creating conversation: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72return Tff7b72True
Tff7b72def Td2a8fflxm_ingest_uriTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3uriTb4b4b4)Tb4b4b4:
Te6edf3local_delivery_signal Tff7b72= Ta5d6ff"Ta5d6fflocal_delivery_occurredTa5d6ff"
Te6edf3duplicate_signal Tff7b72= Ta5d6ff"Ta5d6ffduplicate_lxmTa5d6ff"
Te6edf3ingest_result Tff7b72= Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffingest_lxm_uriTb4b4b4(
Te6edf3uriTb4b4b4,
Te6edf3signal_local_deliveryTff7b72=Te6edf3local_delivery_signalTb4b4b4,
Te6edf3signal_duplicateTff7b72=Te6edf3duplicate_signal
Tb4b4b4)
Tff7b72if Te6edf3ingest_result Tff7b72== Tff7b72FalseTb4b4b4:
Te6edf3response Tff7b72= Ta5d6ff"Ta5d6ffThe URI contained no decodable messagesTa5d6ff"
Tff7b72elif Te6edf3ingest_result Tff7b72== Te6edf3local_delivery_signalTb4b4b4:
Te6edf3response Tff7b72= Ta5d6ff"Ta5d6ffMessage was decoded, decrypted successfully, and added to your conversation list.Ta5d6ff"
Tff7b72elif Te6edf3ingest_result Tff7b72== Te6edf3duplicate_signalTb4b4b4:
Te6edf3response Tff7b72= Ta5d6ff"Ta5d6ffThe decoded message has already been processed by the LXMF Router, and will not be ingested again.Ta5d6ff"
Tff7b72elseTb4b4b4:
T8b949e# TODO: Add message to sneakernet queues
Te6edf3response Tff7b72= Ta5d6ff"Ta5d6ffThe decoded message was not addressed to your LXMF address, and has been discarded.Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6fflxm_uri_ingest.resultTa5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4)
Tff7b72def Td2a8fflxm_ingestTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4, Te6edf3originator Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3should_notify Tff7b72= Tff7b72False
Te6edf3is_trusted Tff7b72= Tff7b72False
Te6edf3telemetry_only Tff7b72= Tff7b72False
Te6edf3own_command Tff7b72= Tff7b72False
Te6edf3unread_reason_tx Tff7b72= Tff7b72False
Tff7b72if Te6edf3originatorTb4b4b4:
Te6edf3context_dest Tff7b72= Te6edf3messageTff7b72.Td2a8ffdestination_hash
Te6edf3unread_reason_tx Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Te6edf3context_dest Tff7b72= Te6edf3messageTff7b72.Td2a8ffsource_hash
Te6edf3is_trusted Tff7b72= Tff7b72selfTff7b72.Td2a8ffis_trustedTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3originator Tff7b72and Te6edf3LXMFTff7b72.Td2a8ffFIELD_COMMANDS Tff7b72in Te6edf3messageTff7b72.Td2a8fffieldsTb4b4b4:
Te6edf3own_command Tff7b72= Tff7b72True
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_db_messageTb4b4b4(Te6edf3messageTff7b72.Td2a8ffhashTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffMessage exists, setting state to: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3messageTff7b72.Td2a8ffstateTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_message_set_stateTb4b4b4(Te6edf3messageTff7b72.Td2a8ffhashTb4b4b4, Te6edf3messageTff7b72.Td2a8ffstateTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffMessage does not exist, savingTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_save_lxmTb4b4b4(Te6edf3messageTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3originatorTb4b4b4, Te6edf3own_commandTff7b72=Te6edf3own_commandTb4b4b4)
Tff7b72if Te6edf3is_trustedTb4b4b4:
Te6edf3should_notify Tff7b72= Tff7b72True
Tff7b72if Tffa657lenTb4b4b4(Te6edf3messageTff7b72.Td2a8ffcontentTb4b4b4) Tff7b72== T79c0ff0 Tff7b72and Tffa657lenTb4b4b4(Te6edf3messageTff7b72.Td2a8fftitleTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72if Tb4b4b4(Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY Tff7b72in Te6edf3messageTff7b72.Td2a8fffields Tff7b72or Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY_STREAM Tff7b72in Te6edf3messageTff7b72.Td2a8fffields Tff7b72or Te6edf3LXMFTff7b72.Td2a8ffFIELD_COMMANDS Tff7b72in Te6edf3messageTff7b72.Td2a8fffieldsTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffSquelching notification due to telemetry-only messageTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3telemetry_only Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Te6edf3telemetry_onlyTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4) Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_create_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.new_conversationsTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgui_displayTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffmessages_screenTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgui_conversationTb4b4b4(Tb4b4b4) Tff7b72!= Te6edf3context_destTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffunread_conversationTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3txTff7b72=Te6edf3unread_reason_txTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.unread_conversationsTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftxtime_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.viewupdate.conversationsTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgui_foregroundTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffSquelching notification since GUI is in foregroundTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3should_notify Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffunread_conversationTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3txTff7b72=Te6edf3unread_reason_txTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.unread_conversationsTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgui_displayTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffconversations_screenTa5d6ff" Tff7b72and Tff7b72selfTff7b72.Td2a8ffgui_foregroundTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3should_notify Tff7b72= Tff7b72False
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Te6edf3should_notify Tff7b72= Tff7b72False
Tff7b72if Te6edf3telemetry_onlyTb4b4b4:
Te6edf3should_notify Tff7b72= Tff7b72False
Tff7b72if Te6edf3should_notifyTb4b4b4:
Te6edf3nlen Tff7b72= T79c0ff128
Te6edf3text Tff7b72= Te6edf3messageTff7b72.Td2a8ffcontentTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3notification_content Tff7b72= Te6edf3textTb4b4b4[Tb4b4b4:Te6edf3nlenTb4b4b4]
Tff7b72if Tffa657lenTb4b4b4(Te6edf3textTb4b4b4) Tff7b72> Te6edf3nlenTb4b4b4:
Te6edf3text Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff...Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffnotifyTb4b4b4(Te6edf3titleTff7b72=Tff7b72selfTff7b72.Td2a8ffpeer_display_nameTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4, Te6edf3contentTff7b72=Te6edf3notification_contentTb4b4b4, Te6edf3groupTff7b72=Ta5d6ff"Ta5d6ffLXMTa5d6ff"Tb4b4b4, Te6edf3context_idTff7b72=Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_clean_messagesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__start_jobs_immediateTb4b4b4(Tb4b4b4)
Te6edf3thread Tff7b72= Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ff__start_jobs_deferredTb4b4b4)
Te6edf3threadTff7b72.Td2a8ffsetDaemonTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3threadTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_setstateTb4b4b4(Ta5d6ff"Ta5d6ffcore.startedTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffSideband Core Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff startedTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffstop_webshareTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffwebshare_server Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwebshare_serverTff7b72.Td2a8ffshutdownTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwebshare_server Tff7b72= Tff7b72None
Tff7b72def Td2a8ffstart_webshareTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffwebshare_server Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72def Td2a8ffwebshare_jobTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72from T7ee787http Tff7b72import Te6edf3server
Tff7b72import T7ee787socketserver
Tff7b72import T7ee787json
Te6edf3webshare_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffwebshare_dir
Te6edf3port Tff7b72= T79c0ff4444
Tff7b72class T56d364RequestHandlerTb4b4b4(Te6edf3serverTff7b72.Td2a8ffSimpleHTTPRequestHandlerTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffdo_GETTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3serve_root Tff7b72= Te6edf3webshare_dir
Tff7b72if Ta5d6ff"Ta5d6ff?Ta5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffpathTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpath Tff7b72= Tff7b72selfTff7b72.Td2a8ffpathTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff?Ta5d6ff"Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3path Tff7b72= Te6edf3serve_root Tff7b72+ Tff7b72selfTff7b72.Td2a8ffpath
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpath Tff7b72== Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4:
Te6edf3path Tff7b72= Te6edf3serve_root Tff7b72+ Ta5d6ff"Ta5d6ff/index.htmlTa5d6ff"
Tff7b72if Ta5d6ff"Ta5d6ff/..Ta5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffpathTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsend_responseTb4b4b4(T79c0ff403Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffend_headersTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff"Ta5d6ffForbiddenTa5d6ff"Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffpath Tff7b72== Ta5d6ff"Ta5d6ff/pkglistTa5d6ff"Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsend_responseTb4b4b4(T79c0ff200Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsend_headerTb4b4b4(Ta5d6ff"Ta5d6ffContent-typeTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fftext/jsonTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffend_headersTb4b4b4(Tb4b4b4)
Te6edf3json_result Tff7b72= Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Te6edf3serve_rootTff7b72+Ta5d6ff"Ta5d6ff/pkgTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwfileTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3json_resultTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsend_responseTb4b4b4(T79c0ff500Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffend_headersTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError listing directory Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3pathTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3es Tff7b72= Ta5d6ff"Ta5d6ffErrorTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffwfileTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3esTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Te6edf3pathTb4b4b4, Ta5d6ff'Ta5d6ffrbTa5d6ff'Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3data Tff7b72= Te6edf3fTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsend_responseTb4b4b4(T79c0ff200Tb4b4b4)
Tff7b72if Te6edf3pathTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ff.apkTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsend_headerTb4b4b4(Ta5d6ff"Ta5d6ffContent-typeTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffapplication/vnd.android.package-archiveTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffend_headersTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwfileTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3dataTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsend_responseTb4b4b4(T79c0ff500Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffend_headersTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError serving file Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3pathTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3es Tff7b72= Ta5d6ff"Ta5d6ffErrorTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffwfileTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3esTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72with Te6edf3socketserverTff7b72.Td2a8ffTCPServerTb4b4b4(Tb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3portTb4b4b4)Tb4b4b4, Te6edf3RequestHandlerTb4b4b4) Tff7b72as Te6edf3webserverTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwebshare_server Tff7b72= Te6edf3webserver
Te6edf3webserverTff7b72.Td2a8ffserve_foreverTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwebshare_server Tff7b72= Tff7b72None
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffWebshare server closedTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3webshare_jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffrequest_lxmf_syncTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3limit Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_IDLE Tff7b72or Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72>Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_COMPLETETb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffrequest_messages_from_propagation_nodeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentityTb4b4b4, Te6edf3max_messages Tff7b72= Te6edf3limitTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLXMF message sync requested from propagation node Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffget_outbound_propagation_nodeTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff for Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentityTb4b4b4)Tb4b4b4)
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffcancel_lxmf_syncTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72!= Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_IDLETb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffcancel_propagation_node_requestsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffget_sync_progressTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3state Tff7b72= Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state
Tff7b72if Te6edf3state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_PATH_REQUESTEDTb4b4b4:
Te6edf3state_val Tff7b72= T79c0ff0.05
Tff7b72elif Te6edf3state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_LINK_ESTABLISHINGTb4b4b4:
Te6edf3state_val Tff7b72= T79c0ff0.1
Tff7b72elif Te6edf3state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_LINK_ESTABLISHEDTb4b4b4:
Te6edf3state_val Tff7b72= T79c0ff0.15
Tff7b72elif Te6edf3state Tff7b72>Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_REQUEST_SENTTb4b4b4:
Te6edf3state_val Tff7b72= T79c0ff0.2
Tff7b72elseTb4b4b4:
Te6edf3state_val Tff7b72= T79c0ff0.0
Tff7b72return Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_progressTff7b72*T79c0ff0.8Tb4b4b4)Tff7b72+Te6edf3state_val
Tff7b72def Td2a8fflxmf_deliveryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4:
Te6edf3time_string Tff7b72= Te6edf3timeTff7b72.Td2a8ffstrftimeTb4b4b4(Ta5d6ff"Ta5d6ff%Ta5d6ffY-Ta5d6ff%Ta5d6ffm-Tffd700%dTa5d6ff Ta5d6ff%Ta5d6ffH:Ta5d6ff%Ta5d6ffM:Ta5d6ff%Ta5d6ffSTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fflocaltimeTb4b4b4(Te6edf3messageTff7b72.Td2a8fftimestampTb4b4b4)Tb4b4b4)
Te6edf3signature_string Tff7b72= Ta5d6ff"Ta5d6ffSignature is invalid, reason undeterminedTa5d6ff"
Tff7b72if Te6edf3messageTff7b72.Td2a8ffsignature_validatedTb4b4b4:
Te6edf3signature_string Tff7b72= Ta5d6ff"Ta5d6ffValidatedTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3messageTff7b72.Td2a8ffunverified_reason Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffSIGNATURE_INVALIDTb4b4b4:
Te6edf3signature_string Tff7b72= Ta5d6ff"Ta5d6ffInvalid signatureTa5d6ff"
Tff7b72if Te6edf3messageTff7b72.Td2a8ffunverified_reason Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffSOURCE_UNKNOWNTb4b4b4:
Te6edf3signature_string Tff7b72= Ta5d6ff"Ta5d6ffCannot verify, source is unknownTa5d6ff"
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLXMF delivery Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3time_stringTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff. Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3signature_stringTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3context_dest Tff7b72= Te6edf3messageTff7b72.Td2a8ffsource_hash
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_ignore_unknownTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4) Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDropping message from unknown sender Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return
Tff7b72if Te6edf3messageTff7b72.Td2a8ffsignature_validated Tff7b72and Te6edf3LXMFTff7b72.Td2a8ffFIELD_COMMANDS Tff7b72in Te6edf3messageTff7b72.Td2a8fffieldsTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrequests_allowed_fromTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3commands Tff7b72= Te6edf3messageTff7b72.Td2a8fffieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_COMMANDSTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffhandle_commandsTb4b4b4(Te6edf3commandsTb4b4b4, Te6edf3messageTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflxm_ingestTb4b4b4(Te6edf3messageTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while ingesting LXMF message Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3messageTff7b72.Td2a8ffhashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff to database: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffhandle_commandsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3commandsTb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3context_dest Tff7b72= Te6edf3messageTff7b72.Td2a8ffsource_hash
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffHandling commands from Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72for Te6edf3command Tff7b72in Te6edf3commandsTb4b4b4:
Tff7b72if Te6edf3CommandsTff7b72.Td2a8ffTELEMETRY_REQUEST Tff7b72in Te6edf3commandTb4b4b4:
Te6edf3timebase Tff7b72= Tffa657intTb4b4b4(Te6edf3commandTb4b4b4[Te6edf3CommandsTff7b72.Td2a8ffTELEMETRY_REQUESTTb4b4b4]Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffHandling telemetry request with timebase Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3timebaseTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72elif Te6edf3CommandsTff7b72.Td2a8ffECHO Tff7b72in Te6edf3commandTb4b4b4:
Te6edf3msg_content Tff7b72= Ta5d6ff"Ta5d6ffEcho reply: Ta5d6ff"Tff7b72+Te6edf3commandTb4b4b4[Te6edf3CommandsTff7b72.Td2a8ffECHOTb4b4b4]Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffHandling echo requestTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsend_messageTb4b4b4(Te6edf3msg_contentTb4b4b4, Te6edf3context_destTb4b4b4, Tff7b72FalseTb4b4b4, Te6edf3skip_fieldsTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72elif Te6edf3CommandsTff7b72.Td2a8ffSIGNAL_REPORT Tff7b72in Te6edf3commandTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffHandling signal reportTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3phy_str Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Te6edf3messageTff7b72.Td2a8ffq Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3phy_str Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffLink Quality: Tffd700{Te6edf3messageTff7b72.Td2a8ffqTffd700}Ta5d6ff%Tffea00\nTa5d6ff"
Tff7b72if Te6edf3messageTff7b72.Td2a8ffrssi Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3phy_str Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffRSSI: Tffd700{Te6edf3messageTff7b72.Td2a8ffrssiTffd700}Ta5d6ff dBmTffea00\nTa5d6ff"
Tff7b72if Te6edf3messageTff7b72.Td2a8ffsnr Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3phy_str Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffSNR: Tffd700{Te6edf3messageTff7b72.Td2a8ffrssiTffd700}Ta5d6ff dBTffea00\nTa5d6ff"
Tff7b72if Tffa657lenTb4b4b4(Te6edf3phy_strTb4b4b4) Tff7b72!= T79c0ff0Tb4b4b4:
Te6edf3phy_str Tff7b72= Te6edf3phy_strTb4b4b4[Tb4b4b4:Tff7b72-T79c0ff1Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3phy_str Tff7b72= Ta5d6ff"Ta5d6ffNo reception info availableTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffsend_messageTb4b4b4(Te6edf3phy_strTb4b4b4, Te6edf3context_destTb4b4b4, Tff7b72FalseTb4b4b4, Te6edf3skip_fieldsTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while handling commands: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ffget_display_name_bytesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdisplay_nameTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffget_sync_statusTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_IDLETb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffIdleTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_PATH_REQUESTEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffPath requestedTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_LINK_ESTABLISHINGTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffEstablishing linkTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_LINK_ESTABLISHEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffLink establishedTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_REQUEST_SENTTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffSync request sentTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_RECEIVINGTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffReceiving messagesTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_RESPONSE_RECEIVEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffMessages receivedTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_NO_PATHTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffNo path to propagation nodeTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_LINK_FAILEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffLink establisment failedTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_TRANSFER_FAILEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffSync request failedTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_NO_IDENTITY_RCVDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffNo identity received by remoteTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_NO_ACCESSTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffNo access to specified nodeTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_FAILEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffSync failedTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_COMPLETETb4b4b4:
Te6edf3new_msgs Tff7b72= Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_last_result
Tff7b72if Te6edf3new_msgs Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffDone, no new messagesTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffDownloaded Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3new_msgsTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff new messagesTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffUnknownTa5d6ff"
Tff7b72def Td2a8ffcleanupTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ffis_connected_to_shared_instanceTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffdetach_interfacesTb4b4b4(Tb4b4b4)
Te6edf3rns_config Tff7b72= Ta5d6ff"""
Ta5d6ff[reticulum]
Ta5d6ffenable_transport = TRANSPORT_IS_ENABLED
Ta5d6ffshare_instance = Yes
Ta5d6ffshared_instance_port = 37428
Ta5d6ffinstance_control_port = 37429
Ta5d6ffpanic_on_interface_error = No
Ta5d6ff[logging]
Ta5d6ffloglevel = 3
Ta5d6ff"""
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────